2013-05-13 47 views
1

下面的代码用于数字的二进制表示。 此代码工作正常.....但我不知道为什么 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

为什么不用'!='而不是'>'? – likeitlikeit 2013-05-13 20:33:50

+0

!=工作..但我想知道这个代码有什么问题? – user2379271 2013-05-13 20:35:34

回答

4

的类型十六进制常数,如0x80000000,是上述的第一个类型,其值在适合的:

  • INT
  • 无符号整型
  • 长整型
  • unsigned long int
  • long long int
  • 无符号长长诠释

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

+0

谢谢....我明白了 – user2379271 2013-05-13 20:43:51