0

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

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:111011110111011100111011**到**0001110100001110等等。我们有 7 种情况,其中 (x&1!=0) 然后00000111被发送到 f,计数为 3,正在打印 3,原始数字变为11110000并发送到 f,然后将 4 发送到 f,但是由于 4 是00000100 count=1 然后我希望打印 1,但输出是 3331。

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

4

1 回答 1

3

您似乎期望原始数字限制为 8 位,这很少是unsigned short.

在第一次移位之后,x将保持0x00ef << 4,即0x0ef0仍然具有相同的位数设置。

于 2012-07-19T09:44:07.350 回答