為什麼計算機中乙個數的相反數是這個數取反再加1

2021-06-10 02:32:15 字數 408 閱讀 8198

以32位pc機中整形數值(int)為例:

在32位pc機中,數字以二進位制方式儲存,能夠表示的最大的數為4g-1(2的32次方減1,轉化為二進位制數也即32位全為1),因為數字4g已經有33位了,最高位為1,剩餘32位為0,所以計算機自動去掉最高位的1,只保留後面的32位,即4g = 0。說白了就是乙個0~4g的數字迴圈,每當數字達到4g,就變為0。

所以對於任意乙個數字x,x+4g=x。那麼x的相反數-x,也應該滿足-x = 4g-x = (4g-1)-x+1。因為(4g-1)是乙個32位全為1的數字,所以(4g-1)-x的值就等於x取反後的值(不信,就在紙上畫畫),所以-x = 4g-x = (4g-1)-x+1 = ~b+1。

對於有符號的整數也同樣適用,不信,你就推算一下。(有符號整數的最高位是乙個標誌位,表示正負;實際表示數字的位數只有31位)

求乙個數的相反數演算法

求乙個數的相反數演算法 inverse to x modulo 1 mod 相反數的定義是 求y 使 x y mod 1 mod 1 param x x inverse to x modulo 1 mod param mod mod inverse to x modulo 1 mod return ...

JAVA 返回乙個數值的相反數的幾種方式

乙個方法接收乙個int型別值,需要返回它的相反數.如傳入1,返回 1 傳入 22,返回22 最簡單的方式是return 0 number 還有其他方式 public class kata public class kata public class kata 還有個更奇葩的 return 13333...

計算機中,為什麼乙個位元組是8位?

說這個問題的時候,首先提一下ascii編碼作為切入比較容易理解一點 ascii編碼 全稱american standard code for information interchange,翻譯過來就是美國資訊交換標準碼。ascii編碼作用 就是編碼,那什麼又是編碼?我個人理解編碼就跟江湖中的好漢劫...