我希望您帮助分析以下代码的输出:
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&amp; 1!= 0)然后 00000111 被发送到f,并且计数是3,3正在打印并且原始数字变为 11110000 并且发送到f,4然后发送到f,但是然后4是 00000100 count = 1然后我预计会打印1,但输出是3331。
有人可以指出我的错误吗?
答案 0 :(得分:3)
您似乎期望原始数字限制在8位,这很少是unsigned short
的大小。
第一班后,x
将保留0x00ef << 4
,即0x0ef0
仍设有相同的位数。