c語言int表示範圍以及移位運算子

2021-06-25 22:58:05 字數 1227 閱讀 3997

剛剛看到的幾個小基礎知識,記錄一下:

在int型為32位的硬體環境中,int的表示範圍是:-2的31次方

2的31次方減1

原因:因為int是帶符號型別,所以最高位為符號位,於是最大表示的正數是:01111111 11111111 11111111 11111111,也就是2的31次方減1。

再來看最小值,-2的31次方的原碼表示為10000000 00000000 00000000 00000000,此時最高位的數字既代表符號,也代表數值。求它的補碼,所得結果為10000000 00000000 00000000 00000000。同樣也是最高位既代表符號又代表數值,也就是說-2的31次方的原碼和補碼是相同的。

接著試試-2的31次方減1,它的原碼為(假設先不考慮溢位)11111111 11111111 11111111 11111111,求反加1之後為10000000 00000000 00000000 00000001,變成了-1。所以,int的表示範圍是: 

-2的31次方

2的31次方減1

然後是移位運算子:

[cpp]

view plain

copy

inti = 1; 

i = i 

<< 2; 

這是把i左移兩位,左移的規則只記住一點:

丟棄符號位,0補最低位!

如果移動的位數超過了該型別的最大位數,那麼編譯器會對移動的位數取模。如對int型移動33位,實際上只移動了332=1位。

右移有兩種,算術右移(帶符號)>>和邏輯右移(不帶符號)>>>。

算術右移符號位不變,左邊補上符號位

如: 1000 1000 >> 3 為 1111 0001

邏輯右移符號位一起移動,左邊補上0

如:1000 1000 >>> 3 為 0001 0001

最後,移位的位數不能超過資料的大小,不能小於0。

本文**:

int表示範圍及解釋

計算機中32位int型別變數的範圍,其中int型別是帶符號整數。正數在計算機中表示為原碼,最高位為符號位 1的原碼為0000 0000 0000 0000 0000 0000 0000 0001 2147483647的原碼為0111 1111 1111 1111 1111 1111 1111 111...

C語言中資料型別的表示範圍

問題 sizeof int 2,int的表示範圍為什麼是 2 15 2 15 1?答 對於有符號數,最高位為符號位。二進位制原碼最大值為0111111111111111 2 15 1,最小值為 1111111111111111 2 15 1 而0分為 0和 0,即0000000000000000和 ...

計算機編碼型別以及變數表示範圍

原碼 反碼和補碼 真值 是帶有正負號的二進位制表示數。機器數 乙個數在計算機中的表現形式,機器數是帶有符號的,在計算機中用乙個數的最高位表示符號,0為正,1為負。原碼 是符號位加上真值的絕對值,和機器數一樣。如果是八位二進位制的表示範圍是 11111111 01111111 也就是 127 127 ...