C中的短整数,Hexa十进制和二进制基数

时间:2012-07-19 09:39:50

标签: c binary hex

我希望您帮助分析以下代码的输出:

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。

有人可以指出我的错误吗?

1 个答案:

答案 0 :(得分:3)

您似乎期望原始数字限制在8位,这很少是unsigned short的大小。

第一班后,x将保留0x00ef << 4,即0x0ef0仍设有相同的位数。