careercup-비트 조작 5.1

2529 단어 비트 조작
5.1 쓰기 프로그램은 정수 N의 i위에서 j위까지의 값을 정수 M의 값과 동일하게 합니다.
제목.
32자리의 수, N과 M, 그리고 두 개의 지시 위치의 수, i와 j를 정한다.쓰기 프로그램은 N의 i위에서 j위까지의 값을 M의 값과 동일하게 한다. (즉, M은 N의 하위 문자열이 되고 N의 i위와 j위 사이에 있다.)
예:
입력: N = 1000000000, M = 10101, i = 2, j = 6
출력: N = 100010100100
해답하다
방안1: 먼저 N중 0위에서 i위로 저장(왼쪽으로 닫고 오른쪽으로: [0, i)))하고ret로 기록한 다음에 N중 0위에서 j위 전체 0([0, j])까지 오른쪽으로 j+1위를 이동한 다음에 왼쪽으로 j+1위를 이동하면 얻을 수 있다.마지막으로 위에서 0을 제거한 값이나 상(m코드는 다음과 같습니다.
int update_bits(int n, int m, int i, int j){

    int ret = (1 << i) -1;

    ret &= n;

    return ((n>>(j+1)) << (j+1)) | (m<<i) | ret;

}

방안2: 왼쪽은 모두 1이고 중간 부분은 모두 0이다. (이 부분의 길이는 m의 길이와 같다) 오른쪽은 모두 1인 마스크 마스크를 n과 위치별로 나누면 n의 중간 부분을 0으로 정리한 결과이다.그리고 m와 왼쪽으로 i위를 옮긴 후 위치를 누르거나 최종 결과를 얻는다.
코드는 다음과 같습니다.
int update_bits1(int n, int m, int i, int j){

    int max = ~0;   //  1

    int left = max - ((1 << j+1) - 1);

    int right = ((1 << i) -1);

    int mask = left | right;

    return (n & mask) | (m << i);

}

좋은 웹페이지 즐겨찾기