有符號整數 儲存

2021-07-23 08:32:15 字數 371 閱讀 7730

本文摘自:

有符號整數,正數的表示區間為:0x00000000-0x7fffffff;負數的表示區間:0x80000000-0xffffffff。

負數在記憶體中都是以補碼的形式存放,補碼的規則是用0減去這個數的絕對值。也可以表示為對這個數取反加1;

為什麼補碼是對這個數取反加1呢?因為,x+x(反)=0xffffffff,於是x+x(反)+1=0,所以可以推導出0-x=x(反)+1;

計算機只會做加法,計算機把減法都轉化為加法:

例如:3-2會轉化為3+(-2);-2的補碼為0xfffffffe。0x00000011+0xfffffffe=0x100000001; 儲存的範圍為4位元組大小。

超出的1將被捨棄,結果為0x00000001。

有符號整數加減溢位檢測問題

當計算有符號整數加減法時需要檢驗是否溢位時 在此,僅討論加法的溢位問題 減法可以轉換為加乙個負數 1.x y 皆為正數時,若 x y 0 則說明發生了溢位 2.x y 皆為負數是,若 x y 0 則說明發生了溢位 注意 int min int min 0 其實,int min int min 1,3...

C語言有符號整數隱式轉換無符號整數出現的陷阱

include include int main 該程式意思是比較字串陣列s和字串陣列t的長度大小。按我們的理解,在第7行應該返回false,即輸出0。c語言執行運算時,如果它的乙個運算數是無符號的,而另乙個是有符號的,那麼c語言會隱式的將有符號引數強制型別轉換為無符號數,並假設這兩個數都是非負的,...

有符號和無符號整數的隱式轉換問題

今天在程式設計過程中遇到乙個有趣的問題,題目是根據類字典序對字串進行排序,其中有一段 如下 if s1.size s2.size 0 return true else return false 其中s1和s2分別是兩個string型別的字串。我用來測試的案例很簡單,是用 h 和 hl 這樣一組字串來...