首先看一個程式:
void main()
{
short sdata1=-1;
unsigned short sdata2=1;
int data1=-1;
unsigned int data2=1000;
if(sdata1>sdata2)
{
printf("1");
}
else
{
printf("2");
}
printf("\n");
if(data1 > data2)
{
printf("1");
}
else
{
printf("2");
}
}
輸出的為什麼是2 1啊?這個是怎麼比較的?
解答
====
在c語言中有一個規則就是:int類型的資料與
unsigned int類型的資料進行比較時會把int類
型的資料轉換為unsigned int 類型的資料,然
後再進行比較。
int data1 = -1 轉換為unsigned int類型的數
據為:4394967295, 這個數肯定要 > 1000 ,
是以第二個會輸出1。
注意:計算機中所有的資料都是按照補碼形式存
儲的,負數的補碼求法是:先求反碼,再加1。反
碼的求法是最高符号位不變,其餘各位按位取反。
ref
===
http://bbs.bccn.net/thread-334562-1-1.html