이 문제를 해결하고 논리를 설명하는 데 도움을주십시오. 여기에 & 연산자가 어떻게 작동하는지 모르겠습니다.비트 AND 연산자는 무엇을할까요?
void main() {
int a = -1;
static int count;
while (a) {
count++;
a &= a - 1;
}
printf("%d", count);
}
이 문제를 해결하고 논리를 설명하는 데 도움을주십시오. 여기에 & 연산자가 어떻게 작동하는지 모르겠습니다.비트 AND 연산자는 무엇을할까요?
void main() {
int a = -1;
static int count;
while (a) {
count++;
a &= a - 1;
}
printf("%d", count);
}
당신이
a&=a-1;
를 참조하는 경우 다음은 이후에 복사 된 비트 및 운전가의와-1입니다.
편집 : 주석에 타데 우시 A. Kadłubowski에서 복사로 :
a = a & (a-1);
꽤 많이 'a = a & (a-1);와 같다.' –
@Tadeusz가 복사하여 귀속되고 upvoted your comment, thnx –
일지도 모른다. 중요한 것은 'a'의 값에 대해이 표현식이 동일하지 않을 수 있다는 점입니다. 다른 변수'b'에 대해'#define a (++ b)'를 고려하십시오. OP가 C.의 복잡한 것을 배우는 CS 학생 인 경우의 사소한 설명. –
&
가 bitwise and operator입니다.
와 동일 동작
a&=a-1;
:
a = a & a-1;
가 a
의 최하위 비트를 클리어한다.
따라서 프로그램은 효과적으로 a
에 설정된 비트 수를 계산합니다.
count
은 static
으로 선언되므로 자동으로 0
으로 초기화됩니다.
당신이라고
static int count=0;
운영자 & 및 a
의 a&=a-1;
는 최하위 비트를 클리어 http://en.wikipedia.org/wiki/Bitwise_operation#AND
식 (오른쪽 1)해야한다
을 초기화되지 않은 카운트있다. 이 코드는a
(이 경우 -1)의 비트 수를 계산합니다.
32 비트 정수 구성에
a = -1 ; // 11111111 11111111 11111111 11111111 32bits signed integer
코드 출력 32
로부터 출발.
카운트는 방법에 의해 초기화되어야합니다. – Andrew
무엇이 문제입니까? 당신이 기대하는 대답은 무엇입니까? – MAK
다음과 같이 많이 보입니다. http://stackoverflow.com/questions/109023/best-algorithm-to-count-the-number-of-set-bits-in-a-32-bit-integer/109036#109036 – sarnold