有符號(int)和無符號(unsigned int)
unsigned int plus_a = 12; unsigned int plus_b = 13; int result_c = plus_a - plus_b > 0 ? plus_a - plus_b : 0;
上面得到的結果: -1
不應該是0的嗎? 調試可以發現 plus_a - plus_b 得到的結果是一個很大的整數(因為是unsigned int 類型,最高位的正負標志位也被當成數據本身,
並非是int 類型的時候的正負標志了),所以表達式中的條件是成立的,那最終結果應該是最大的那個數啊(因為是plus_a - plus_b),
我猜測是運算結果賦給了 int 類型,
再來驗證一下
unsigned int plus_a = 12; unsigned int plus_b = 13; unsigned int result_c = plus_a - plus_b > 0 ? plus_a - plus_b : 0;
上面的結果是:4294967295
再看下面一段代碼
unsigned int plus_a = 12; unsigned int plus_b = 13; int result_c = (int)(plus_a - plus_b) > 0 ? plus_a - plus_b : 0;
結果是:0
應該是兩個 unsigned int 類型運算結果就是 unsigned int類型
所以在使用unsigned int 類型的時候,要注意這些問題,
我得回去重新讀《深入理解計算機系統》相關章節了,竟然都不敢肯定的分析這個現象了
記錄一下,希望對技術同仁們有些幫助,願上帝賜福與你們!
