전기전자공학/프로젝트
[Kernighan - C] #2 - 10 지정 연산자와 수식
LinZBe4hia
2017. 6. 25. 22:46
2.10 지정연산자와 수식
The C Programming Language - Kernighan
i = i + 2 수식을 i += 2로 바꿀수 있는데,
연산자 += 를 '지정 연산자'라고 부른다.
● 1비트 갯수 세기 함수
1 2 3 4 5 6 7 8 9 10 | /* bitcount: count 1 bits in x */ int bitcount(unsigned x) { int b; for (b = 0; x != 0; x >> 1) if (x & 01) b++; return b; } | cs |
★인수 x를 unsigned로 선언함으로써 우측 이동시 빈 비트가 기계에 관계없이 sign비트가 아닌 0으로 채워질 수 있다.
[예제 2-9]
2의 보수계에서 x & (x-1)은 x의 최우측 1비트를 지운다. 그 이유를 설명하라. 이 결과를 가지고 bitcount 프로그램을 작성하라
x = X X X X X X 일 때,
x - 1 = X X X X X 0 이다.
x와 y가 AND 연산을 하면 맨 오른쪽 비트는 0이 되므로 지운다고 할 수 있다.
코드:
1 2 3 4 5 6 7 8 9 | /* bitcount: count 1 bits in x through x & (x-1) */ int bitcount(unsigned x) { int b; for (b = 0; x != 0; x >> 1) if (x & (x-1)) b++; return b; } | cs |