unsigned int 無符號整型的使用


有符號(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 類型的時候,要注意這些問題,

我得回去重新讀《深入理解計算機系統》相關章節了,竟然都不敢肯定的分析這個現象了

 

記錄一下,希望對技術同仁們有些幫助,願上帝賜福與你們!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM