次のコードの出力を分析するのを手伝ってください。
int f(unsigned short x){
int count;
for (count=0; x!=0; x>>=1){
if (x & 1)
count++;
}
return count;
}
int main(void){
unsigned short x = 0x00ef;
while (x){
printf("%d", f(f(x)));
x<<=4;
}
printf("\n");
return 0;
}
バイナリベースでx
239 または11101111として扱います。
11101111 != 0なので 、while ループに入ります: f(f( 11101111 ))、次に f のカウントは 7 に達します: 11101111から01110111から00111011** から **00011101から00001110など。(x&1!=0) で00000111が f に送信され、count が 3 で、3 が出力されて元の数値が11110000になり、f に送信される7 つのケースがあります。 00000100 count=1 で、1 が出力されると予想していましたが、出力は 3331 です。
誰かが私の間違いを指摘できますか?