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;這不是一個錯誤嗎?我也想知道程序是如何工作的。
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;這不是一個錯誤嗎?我也想知道程序是如何工作的。
signed char y=-1;
-1通常存儲在2's
補碼形式,但y
被解釋爲陽性。所以y
成爲一個非常大的值,它總是大於x
。
即使它的存儲是籤+級形式,它仍然是一個非常大的值,如果治療爲陽性。如果解釋爲正值,則-1的1的補碼補碼也大於1。
你怎麼知道它**會以2的補碼存儲?它可以存儲爲1的補碼,也可以以符號+幅度表示形式存儲。 – 2013-12-11 14:11:22
這些拼寫爲「解釋」和「正面」。用「e」和**一個**「s」。 – 2013-12-11 14:16:08
什麼是符號+大小? – user3087840
這與系統的存儲機制有關。
爲了簡單起見,請檢查以下代碼,其中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]#
希望這有助於。
1.'unsigned int'; 2.不,它不是; 3.它工作得很好。 – 2013-12-11 14:09:29
可能的重複:[「unsigned」關鍵字](http://stackoverflow.com/a/16568382/1825094)(什麼'unsigned'沒有一個特定的類型是什麼意思?) –
將字符分配給我們遵循的變量,即char y = 'Z'。那麼如何將-1存儲在y中? – user3087840