C語言int型數據范圍


在32位及以上操作系統上,int型數據的十進制表示范圍是:-231 到   231-1。
原因:因為int是帶符號類型,所以最高位為符號位,於是最大表示的正數的原碼(正數的原碼和補碼相同):01111111 11111111 11111111 11111111,也就是2的31次方減1。
再來看最小值,-2的31次方的原碼表示為10000000 00000000 00000000 00000000,此時最高位的數字既代表符號(1代表是負數,0代表是正數),也代表數值。求它的補碼(除符號位外按位取反,最后一位+1),所得結果為10000000 00000000 00000000 00000000。同樣也是最高位既代表符號又代表數值,也就是說-2的31次方的原碼和補碼是相同的。
接着試試-2的31次方減1,它的原碼為(假設先不考慮溢出)11111111 11111111 11111111 11111111,求反加1之后為10000000 00000000 00000000 00000001,變成了-1。所以,int的表示范圍是: -231 ~   231-1

 

補充運算符(轉)

int i = 1;
i = i << 2;

這是把i左移兩位,左移的規則只記住一點:丟棄符號位,0補最低位!
如果移動的位數超過了該類型的最大位數,那么編譯器會對移動的位數取模。如對int型移動33位,實際上只移動了33%32=1位。
右移有兩種,算術右移(帶符號)>>和邏輯右移(不帶符號)>>>。
算術右移符號位不變,左邊補上符號位。如: 1000 1000 >> 3 為 1111 0001
邏輯右移符號位一起移動,左邊補上0。如:1000 1000 >>> 3 為 0001 0001
最后,移位的位數不能超過數據的大小,不能小於0。

轉自http://blog.csdn.net/jiangyi711/article/details/5217431


免責聲明!

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



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