//2019/03/04 #include <iostream> int main() { unsigned u1 = 42, u2 = 10; std::cout << u1 - u2 << std::endl; std::cout << u2 - u1 << std::endl; system("pause"); return 0; }
結果:
4294967295 ??
首先,仔細觀察輸出的結果4294967295,發現4294967295=2^32-1,哦!好像有點規律!
但是,又為啥會是這樣?
讓我們先來討論下int和unsigned int的表現形式,他倆都是4個字節,32位的二進制表示,但int有一位是符號位,unsigned則沒有。
-1的int類型表示為1000 0000 0000 0000 0000 0000 0000 0001,
那么將其強制轉換成unsigned int 應該是1000 0000 0000 0000 0000 0000 0000 0001(紅色為符號位),用指數表示是2^31+1,而不是2^32-1!
由於計算機存儲的是補碼,補碼=除符號位,原碼取反+1,
即:-1:1000 0000 0000 0000 0000 0000 0000 0001
取反: 1111 1111 1111 1111 1111 1111 1111 1110
加1:1111 1111 1111 1111 1111 1111 1111 1111 = 2^32-1