2017-10-28 2 views
-3

이 코드를 다시 작성 하시겠습니까? 비트 시프트가 실제로 어떻게 작동하는지 이해할 수 없습니다. 이 코드를 표현하는 쉬운 방법이 있다면 알려주십시오.코드 표현 (C)

이 코드는 숫자의 비트 표현에서 1 (1)의 수를 계산합니다.

int numberofones(int value, int count) { 

    int numchars = 8 * sizeof(int); 
    int n; 

    for(n = 0; n < numchars; n++) 
    { 
    if(value & (1 << (numchars - 1 - n))) { 
    count++; 
    } 
    } 
    return count; 
} 
+0

아니, 오른쪽 이동은 부호 확장된다. 비트 수 이상으로 시프트하는 것은 정의되지 않습니다. – wildplasser

+0

@yano - 음수 값을 왼쪽으로 비트 시프트하면 정의되지 않은 동작이 발생합니다. 음수가 아닌 값을 왼쪽으로 비트 시프트하면 (결과가 표현 가능한 한) 잘 정의됩니다. –

+0

아아, 웁스, '1'이 이동하는 중이다. 나는 'numchars'를 생각하고 있었다. 충분히 자세히 보지 않았다. – yano

답변

0
int numberofones(int value) { 

    int numchars = 8 * sizeof(int); 
    int n; 
    int count = 0 ; 

    for(n = 0; n < numchars; n++) 
    { 
    if(value & (1 << n)) 
     count++; 
    } 
    return count; 
}