【问题标题】:Short int, Hexa Decimal and Binary bases in CC中的短整数,十六进制和二进制基数
【发布时间】: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:111011110111011100111011** 到 **0001110100001110 等等。我们有 7 种情况,其中 (x&1!=0) 然后 00000111 被发送到 f,计数为 3,正在打印 3,原始数字变为 11110000 并发送到f, 4 被发送到 f,但是由于 4 是 00000100 count=1,然后我希望打印 1,但输出是 3331。

谁能指出我的错误?

【问题讨论】:

    标签: c binary hex


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 2014-10-30
      • 2021-06-08
      • 1970-01-01
      • 2023-03-15
      • 2020-09-10
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多