2013-12-11 112 views
-2
main() 
{ 
    unsigned x=1; 
    signed char y=-1; 
    if(x>y) 
     printf("x>y"); 
    else 
     printf("x<=y"); 
} 

輸出爲:X < = Y不理解輸出

但我的問題是,在聲明無符號X = 1;沒有數據類型,如int或char。那麼編譯器會假設什麼?並在char y = -1;這不是一個錯誤嗎?我也想知道程序是如何工作的。

+2

1.'unsigned int'; 2.不,它不是; 3.它工作得很好。 – 2013-12-11 14:09:29

+0

可能的重複:[「unsigned」關鍵字](http://stackoverflow.com/a/16568382/1825094)(什麼'unsigned'沒有一個特定的類型是什麼意思?) –

+0

將字符分配給我們遵循的變量,即char y = 'Z'。那麼如何將-1存儲在y中? – user3087840

回答

2
signed char y=-1; 

-1通常存儲在2's補碼形式,但y被解釋爲陽性。所以y成爲一個非常大的值,它總是大於x


即使它的存儲是籤+級形式,它仍然是一個非常大的值,如果治療爲陽性。如果解釋爲正值,則-1的1的補碼補碼也大於1。

+0

你怎麼知道它**會以2的補碼存儲?它可以存儲爲1的補碼,也可以以符號+幅度表示形式存儲。 – 2013-12-11 14:11:22

+0

這些拼寫爲「解釋」和「正面」。用「e」和**一個**「s」。 – 2013-12-11 14:16:08

+0

什麼是符號+大小? – user3087840

3

「裸體」unsigned的默認類型是unsigned int

這個比較的結果得益於C的算術升級,在比較之前,這兩個參數將轉換爲>爲合適的類型。

+0

轉換如何工作 – user3087840

0

這與系統的存儲機制有關。

爲了簡單起見,請檢查以下代碼,其中o/p以十六進制[直接存儲格式]顯示。

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
     unsigned int ua = 1; 
     signed int sa = -1; 
     if (ua>sa) 
       printf("ua>sa\n"); 
     else 
       printf("sa>ua\n"); 

     printf("unsigned = 0x%x\t signed = 0x%x\n", ua, sa); 

     return 0; 
} 

輸出:

[[email protected] Practice]# ./a.out 
sa>ua 
unsigned = 0x1 signed = 0xffffffff 
[[email protected] Practice]# 

希望這有助於。