二进制表示的数字

时间:2013-05-13 20:31:40

标签: binary

下面的代码用于数字的二进制表示。 这段代码工作得很好.....但我不知道为什么 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;
}

1 个答案:

答案 0 :(得分:4)

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

  • INT
  • unsigned int
  • long int
  • unsigned long int
  • long long int
  • unsigned long long int

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