2013-05-13 58 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

相關問題