參考文章:
例: 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。在編寫 的時候,因為忘...