補碼轉換為原碼,為什麼是先取反再加1?

時間 2021-06-23 01:11:16

1樓:NaN

首先我們考慮一下負數實際上是什麼。

比如8位二進位制數,8位二進位制有256種可能,所以最多可以表示256種數字。如果是無符號的情況,這樣的數字可以表示0到255。

那麼256呢?255+1會是什麼情況呢?

眾所周知,

255的二進位制形式是1111 1111,

而256的二進位制形式是1 0000 0000。

那麼,如果嘗試用8位二進位制去表示256,也就是說,8位下的255+1,其結果會是,0000 0000。

也就是說,在8位二進位制下,256=0。

這種關係在數學上有專門的名稱,叫做「同餘」。這樣的關係會表示成256 === 0 (mod 256)

那麼,類似的,-1 = 0 - 1 = 256 - 1 = 255,也就是合情合理的了。(-1 === 255 (mod 256))

這樣的表示法會使得二進位制加減法變得自然,比如1-2=1+(-2)在這種表示法下是自然成立的。這是因為a mod c + b mod c === a + b (mod c)。

至於為什麼是取反加一,還是以8位為例,

0 - a = 255 - a + 1,

而255 - a正是取反的過程。

另外因為0 - (0 - a) = a,這個過程同樣是其自身的逆。

補碼***為什麼可以表示-128?

另外乙個建議吧:建議不管是大學還是培訓班,講負數表示的時候一定要講一下這個同餘理論。

為什麼說電阻是 將電流轉換為電壓的元件 ?

李敬芳 初三學歐姆定律了,假如你沒學馬上就要學,由於我就初三。首要串聯電路中,跟你說說各物理量之間的聯絡。電源電壓 各用電器兩頭電壓之和總電阻 各串聯電阻之和電流處處持平等於總電壓除以總電阻或許你用單個用電器算出來的電流也是對的,只需你算對了。知道歐姆定律以後,以上三個規則至少知道兩個才能推另乙個。...

JAVA中 1取反為什麼是0

uncle lv 可以試著輸出一下 0 和 1 在計算機中的二進位制表示 System out println Integer toBinaryString 0 System out println Integer toBinaryString 1 從輸出可以看出 0 0000 0000 1 111...

為什麼補碼 10000000 的真值是 128

已重置 建議去看一下計算機組成原理,計算機有原碼,補碼和反碼三種,原碼和反碼是不能表示 128的,補碼可以表示 128因為 1 127 10000001 原 11111111 原 11111111 補 10000001 補 10000000 補 128 相當於 0 原但是不能由它反推 0的原碼! h...