면접 의 길 (26) - 면접 관련 비트 연산 총화

자바 의 비트 연산 소개:
자바 가 제공 하 는 비트 연산 자 는 왼쪽 이동 (< <), 오른쪽 이동 (> >), 기호 없 이 오른쪽 이동 (> > >), 비트 와 (&), 비트 또는 (|), 비트 비 (~), 비트 차이 또는 (^) 가 있 습 니 다. 비트 비 (~) 를 제외 하고 모두 이원 연산 자 입 니 다.
  • 좌 이동 저 위 보 영
  • 정수 가 오른쪽으로 이동 하고, 고 위 는 0 으로 보충 하고, 음 수 는 오른쪽으로 이동 하 며, 고 위 는 1 로 보충한다. 음수 가 부호 없 이 오른쪽으로 이동 할 때 0 으로 부 위 를 진행한다 (자 연 스 럽 게 음수 에서 양수 로 변 한다)
  • 면접 문제 예:
        ,      ,       1
       ?

    해법 1: (순환 을 피하 기)
    사고 분석:
    먼저 n 순환 을 오른쪽으로 이동 시 키 고 1 과 연산 을 할 생각 입 니 다.n '이 마이너스 인 상황 을 고려 하면 오른쪽 에 1 을 보충 하면 사순환 이 나타난다.그래서 1 왼쪽 이동 과 n 을 비트 연산 으로 합 니 다.
    int numberOf1(int n){
        int count = 0;
        int flag = 1;
        while(flag != 0){
            if(flag & n != 0){
            count++;
            }
            flag = flag << 1;
        }
        return count;
    }

    우아 한 해법:
    사고 분석:
    한 수가 0 과 같 지 않 으 면 적어도 한 명 은 1 이다. 가장 오른쪽 에 있 는 사람 이 1 이 라 고 가정 한 후에 마지막 1 이 0 이 되 고 뒤의 0 이 1 이 되 며 하나 가 아 닌 것 도 이런 상황 이다.예 를 들 어 1100, 1011 을 빼 면...하나의 숫자 와 그것 의 하 나 를 빼 서 비트 연산 을 하 는 것 은 그의 마지막 변 의 1 을 0 으로 바 꾸 는 것 과 같다.
    코드
    int numberOf1(int n){
        int count = 0;
        while( n != 0){
            count++;
            n = n & (n-1);
        }
        return count;
    }

    관련 면접 문제:
    하나:
             2     ?

    생각:
    2 의 정수 제곱, 2 진법 중 1 개 만 있다.
    둘:
          m,n,    m    ,    n?

    생각:
    선 이 또는 후 판단 결과 중 1 의 수
    비트 연산 총화:
    하나의 숫자 와 그 숫자 를 줄 이 는 것 은 이 숫자 를 바 이 너 리 맨 오른쪽 에 있 는 1 을 0 으로 바 꾸 는 것 과 같다. 이 생각 은 많은 문 제 를 해결 할 수 있다.
    블 로그 링크 참조:http://blog.csdn.net/xiaochunyong/article/details/7748713 검지 제공

    좋은 웹페이지 즐겨찾기