전기전자공학/프로젝트

[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