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
補充運算符(轉)
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
C語言int型數據範圍