-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;
}
아니, 오른쪽 이동은 부호 확장된다. 비트 수 이상으로 시프트하는 것은 정의되지 않습니다. – wildplasser
@yano - 음수 값을 왼쪽으로 비트 시프트하면 정의되지 않은 동작이 발생합니다. 음수가 아닌 값을 왼쪽으로 비트 시프트하면 (결과가 표현 가능한 한) 잘 정의됩니다. –
아아, 웁스, '1'이 이동하는 중이다. 나는 'numchars'를 생각하고 있었다. 충분히 자세히 보지 않았다. – yano