【问题标题】:Binary representation of a number数字的二进制表示
【发布时间】:2013-05-07 23:48:03
【问题描述】:

以下代码用于数字的二进制表示。 这段代码工作正常.....但我不知道为什么 if((x&(0x80000000))>0) 应该是 <0 而不是 >0 因为如果 x 的第一位是 1,则生成的数字将是 -2147483748,小于 0 但这段代码仍然有效。

#include<stdio.h>
int main()
{
    int x;
    scanf("%d",&x);
    for(int i=0;i<32;i++) 
    {
        if((x&(0x80000000))>0)
            printf("1");
        else
            printf("0"); 
        x=x<<1;
    }
    printf("\n");
    getchar();
    getchar();
    return 0;
}

【问题讨论】:

  • 为什么不直接使用!= 而不是&gt;
  • != 有效.. 但我想知道这段代码有什么问题?

标签: binary


【解决方案1】:

十六进制常量的类型,例如0x80000000,是其值适合的这些类型中的第一个:

  • int
  • 无符号整数
  • 长整数
  • unsigned long int
  • long long int
  • unsigned long long int

intunsigned int 是32 位的C 实现中,0x80000000 不适合int。所以它是一个无符号整数。然后,在x &amp; 0x80000000 中,x 从int 提升到unsigned int 以匹配。因此,表达式是无符号的,并且值大于零,而不是小于零。

【讨论】:

    猜你喜欢
    • 2012-01-24
    • 2021-04-20
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多