簡體   English   中英

如何從其定義中得到二的補碼的編碼公式

[英]How can we get the encoding formula of two's completment from its definition

我閱讀了wiki 文章和許多其他文章。 wiki 中的定義是“作為一個數字關於 2N 的補碼的定義屬性就是這個數字與原始數字的總和產生 2N。”使用兩者的補碼表示計算原始值的公式是“二進制補碼系統以二進制數表示形式對正數和負數進行編碼。每個位的權重是 2 的冪,但最高有效位除外,其權重是相應的 2 的負數。”


例如,對於使用最多三位數字的二進制數 p=-3,要計算二進制補碼表示,我們使用 1000-011=101,這是 p 的二進制補碼表示,-1x2^2+0x2^ 1+1x2^0=-3是p的原始值。 我只是不知道為什么我們可以通過將公式應用於兩者的補全表示來獲得原始值? 是否有任何推理或證明過程? 或者只是另一種定義和賦值規則,我們使用公式將每個原始值分配給對應的二進制補碼表示。

二進制補碼表示與標准的以二為基的表示相同,除了高位是其正常值的負數。 因此,例如 8 位二進制補碼的位的值為

-128 64 32 16 8 4 2 1

所以給定 10001001,它的值為 -128 + 8 + 1 = -117


回答你后面的問題。 “二進制補碼”有多種定義,它們都是等價的,所以我不確定你認為哪一個是“官方”的。

為簡單起見,我將假設一台 8 位計算機,只是數字很小。

請注意,您計算機上的 ADD 指令並不真正執行加法。 它執行一個加法,mod 256。如果你做了 240 + 27,你會得到 11,你不會對此感到驚訝。 那是電腦上的加法。

但請注意,mod 256、240 和 -16 是相同的數字。 所以計算機不知道你是加 240 和 27,還是 -16 和 27,在這兩種情況下,你都會得到相同的答案,11。

處理無符號數時,您告訴計算機將 8 位視為 0 到 255 之間的數字。處理有符號數時,您(而不是計算機)將大於 128 的數字視為小於 256 的數字。 但電腦不在乎。

請注意,與 ADD 完全相同的東西也適用於 SUB 和 MUL。 它不適用於除法。

我希望這能弄清楚發生了什么。 沒有魔法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM