【发布时间】:2012-07-19 09:39:49
【问题描述】:
我希望您能帮助我分析以下代码的输出:
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。
so 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。
谁能指出我的错误?
【问题讨论】: