下面的代码用于数字的二进制表示。
这段代码工作得很好.....但我不知道为什么
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;
}
答案 0 :(得分:4)
十六进制常量的类型,例如0x80000000
,是其值适合的第一类:
在int
和unsigned int
为32位的C实现中,0x80000000
不适合int
。所以它是一个unsigned int。然后,在x & 0x80000000
中,x从int
升级到unsigned int
以匹配。因此,表达式是无符号的,并且该值大于零,不小于零。