我希望您能帮助分析以下代码的输出:
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等等。我们有 7 种情况,其中 (x&1!=0) 然后00000111被发送到 f,计数为 3,正在打印 3,原始数字变为11110000并发送到 f,然后将 4 发送到 f,但是由于 4 是00000100 count=1 然后我希望打印 1,但输出是 3331。
有人可以指出我的错误吗?