來看看C語言的-1>1並且小有1的問題

先看如下代碼:

#include <stdio.h>
//small to big, signed to unsigned
int main()
{
     unsigned int ui_one =1;
     signed int i_one =1;
     signed short s_minus_one =-1;
     if(s_minus_one>ui_one)
         printf("-1>1\n");
     if(s_minus_one<i_one)
         printf("-1<1\n");
}

輸出-1>1 ,又輸出-1<1

來解釋下原因:

1. 當兩個不同類型做運算時候,c 會遵從內存佔用小的向大的轉,有符號的向無符號的轉。

2. 負數在內存中是以補碼的形式存在的。

s_minus_one在內存中爲0xffff,和ui_one做比較的時候,s_minus_one的值變成2的16次方,所以大於1

s_minus_one 和i_one做比較的時候, 向signed int 轉, 這個時候s_minus_one 還是-1,所以小於1



MAC 系統貌似有些不一樣。要看看其他unix分支。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章