無符號數的減法

2021-10-05 04:12:36 字數 1229 閱讀 3358

儲存在計算機中的資料是一定的,所謂的無符號數,只是對於資料的解讀方式不一樣,並不影響資料之間的計算。而無符號數之間進行的加減法運算,是通過補碼來進行的。比如a - b,實質上是a補 + (-b補)

for example:

unsigned int x = 5;

unsigned int y = 10;

cout << x - y << endl;

x - y的結果,並不是我們常規計算得到的-5,程式執行的結果如下:

4294967291

--------------------------------

process exited after 0.3427 seconds with return value 0

請按任意鍵繼續. . .

初看可能很怪異,但是根據我們上面所說的,將這個減法過程手動模擬一下,就可以理解了:

5的原碼:  00000000 | 00000000 | 00000000 | 00000101

10的原碼:00000000 | 00000000 | 00000000 | 00001010

5的補碼:  00000000 | 00000000 | 00000000 | 00000101

-10的補碼:11111111 | 11111111 | 11111111 | 11110110

(5)補 + (-10)補 = 00000000  00000000  00000000  00000101 + 11111111  11111111  11111111  11110110

= 11111111 | 11111111 | 11111111 | 11111011

上面的結果如果用無符號整數解讀出來應該就是4294967291。我們可以驗證一下:

#includeusing namespace std;

int main()

11111111111111111111111111111011

--------------------------------

process exited after 0.04406 seconds with return value 0

請按任意鍵繼續. . .

所以,所謂無符號數,只是一種對於資料的解讀方式,並不影響資料之間的計算。

有符號數與無符號數

關於有符號數和無符號數的一些重要知識點,包括它們在記憶體中的儲存方式 互相轉換 越界計算等。大家肯定都知道,對於有符號數,資料型別的最高位用於標示資料的符號,最高位為1表示負數,最高位為0表示正數,那麼今天我們主要就此討論乙個問題 在計算機內部具體是如何表示有符號數呢?在計算機內部是通過補碼的方式來...

有符號數和無符號數

有符號和無符號整數 1.通常情況下,大多數字預設的是有符號數,比如 4,5 要想寫乙個無符號數必須在後面加u 比如 4u,5u 2.在計算機中有符號數是用補碼的形式來表示的,最高位是符號位。無符號數就是正數唄 正數的補碼和原碼相同。比如 1 在計算機中表示為 11111111 11111111 11...

無符號數和有符號數

人有十個手指頭,習慣了逢十進一,於是十進位製成了生活中的標準。程式的世界只有高低電平兩種狀態,更適合用二進位制來表示,於是二進位製成了程式世界的標準。對與無符號數來說,我們更喜歡談他們之間的轉化,十進位制是我們最習慣的進製,於是十進位制轉為r進製,r進製轉為十進位制變尤為重要。十進位制 r進製 整數...