整數取反(取負)運算

2021-09-27 02:00:43 字數 2281 閱讀 2948

參考文章:

例: 5的補碼為10000000 00000000 00000000 00000110

(2)負數的補碼=原碼除符號位外取反+1;

例:-5的補碼為10000000 00000000 00000000 00000110

(3)數在計算中以補碼形式存放,且數的運算通過補碼進行;

32為的int型別,

1.對於正數5

5的原碼、反碼、補碼均為:00000000 00000000 00000000 00000101

2.對於負數5

因為負數的反碼為對該數的原碼除符號位外各位取反,補碼為其反碼加1,所以對於-5:

原碼為:10000000 00000000 00000000 00000101

反碼為:11111111 11111111 11111111 11111010

補碼為:11111111 11111111 11111111 11111011

3.int的最小值為-2147483648,按照計算方法,

原碼:10000000 00000000 00000000 00000000

反碼:11111111 11111111 11111111 11111111

補碼:00000000 00000000 00000000 00000000

+0的原碼、補碼、反碼均為00000000 00000000 00000000 00000000

如果計算機中,-2147483648用補碼00000000 00000000 00000000 00000000來表示則和0的補碼一樣,不能區分開;

故而計算機中,-2147483648用補碼10000000 00000000 00000000 00000000來表示。

32位最小負整數的補碼為10000000 00000000 00000000 00000000

計算機中-2147483648取反為:01111111 11111111 11111111 11111111,此為儲存正數的補碼,換算原碼得到數為2147483647

單目運算子「-」為取負,-2147483648取負為2147483648,顯然超過int型別範圍(-2147483648~2147483647),剛好超過乙個就變為-2147483648,所以其對應的補碼仍為10000000 00000000 00000000 00000000,

(1) 對應補碼理解就是-x=~x+1;即補碼取反加1,10000000 00000000 00000000 00000000取反加1後任然為10000000 00000000 00000000 00000000,對應數為-2147483648

(2) 1-i為(-i)+1,對應補碼為:

10000000 00000000 00000000 00000000+00000000 00000000 00000000 00000001=10000000 00000000 00000000 00000001

轉換為十進位制為:- 2147483647

(3) -1-i為(-i)+(-1),對應補碼為:

10000000 00000000 00000000 00000000+11111111 11111111 11111111 11111111=01111111 11111111 11111111 11111111

轉換為十進位制為: 2147483647

其實也可以從十進位制理解:-2147483648-1=-2147483649,超過範圍後變為2147483647

實驗**

int main()

4294967291

54294967291

54294967291

5

因此,使用unsigned int獲取整數絕對值需要考慮正負號。

如果需要計算任意乙個int型別的數的絕對值,不能直接使用abs函式,因為-2147483648的abs函式計算結果仍然是-2147483648,當然如果非要用abs函式,可以將-2147483648當做特殊情況單獨處理即可,因為abs函式對除-2147483648的計算結果都是正確的。

如果在某些情況下不能用庫函式,則可以採用如下方式:

實驗**

int main()

else

cout

}

c 整數取反 C 運算子

運算子是每一種程式語言中必備的符號,如果沒有運算子,那麼程式語言將無法實現任何運算。運算子主要用於執行程式 運算,例如加法 減法 大於 小於等。下面我們將介紹算術運算子 邏輯運算子 比較運算子 三元運算子以及運算子的優先順序。算術運算子 算術運算子是最常用的一類運算子,包括加法 減法 乘法 除法等,...

面試題 整數取反

完成函式reverse,要求實現把給定的乙個整數取其相反數的功能,舉兩個例子如下 x 123,return 321 x 123,return 321 位址是我提交的 是 reverseintergertest.cpp 定義控制台應用程式的入口點。include stdafx.h include in...

7 Reverse Integer 整數取反

題目要求很簡單,就是給定乙個在 2 31,2 31 1 範圍內的整數,對該整數取反。比如,輸入 123,輸出 321。輸入 123,輸出 321。輸入 120,輸出 21。這個題目在求解的時候,需要注意的是資料型別的選取,因為涉及到溢位,其次當輸出結果產出範圍後,結果要變為0。在編寫 的時候,因為忘...