補碼符號位能夠參與運算?的個人理解

2021-10-22 17:43:30 字數 2410 閱讀 2964

在學習二進位制計算時,實際計算機中使用補碼來存負數,從而將所有的減操作都化為加操作,我當時有個疑問,為什麼能夠帶帶符號操作室所有的符號位都能被正確的表示出來,

參考大佬的

大佬點出了,補碼沒有負數。

-還需要了解, 補碼的由來是什麼

參考以8位2進製數為例子。

補碼對於正數來說 是正數本身 加上符號位0 也還是正數本身

補碼對於負數來說 就是到底是什麼, 負數是帶有符號位的,那麼補碼 就是對於這個8位數的模 - 負數的數值部分杜對8位二進位制數來說 負數 就是 256(1000 0000) - 數值部分(也就是將負數的符號位變為0)

下面考慮,在具體計算過程中,帶上符號位,會有什麼結果。

首相我們要將乙個數分成,符號位,和數值位 2部分計算。

1.兩正數相加 不存在符號位的問題

由於0表示正號。 對應的兩個正數相加,符號位不會發生變化。也就意味著正數符號位參與計算可行。

2.乙個正數 與 乙個負數相加時如何確定符號位。(以8位2進製數為例子。 )

由於負數使用補碼的表現形式。 例如:10-2 中。 我們是實際上是使用 10的 補碼 0 000 1010 + -8的補碼

而-8的補碼 其實又是(模 - 負數數值部分的原碼)也就是用 1000 0000 - 0000 1000

那麼其計算過程 就可以改變為

正數的原碼 + 模 - 負數數值部分的原碼

變形為: 模 +(正數原碼 - 負數數值原碼) = 結果值

在帶入符號計算時,其實符號相加預設為1(表負數)

如果此時,正數 大於 負數 ,那麼結果值 就是模+乙個數。而模這個是本身就是相當於乙個進製。

如果此時 正數 小與 負數 ,那麼結果值,就會小與 模本身 ,從而不發生進製,表示這個值 是乙個負數的補碼。由於不進製,符號位的預設結果 又是負的。

3.當兩個數都是負數的時候,理論上結果一定是負數。

但是在實際計算中,兩個負數的符號位,預設值是0

兩個負數使用補碼相加,實際上等於

(模-負數數值部分原始碼)+(模-負數數值部分原始碼)= 結果值

又由於 那麼就等於 2模 - (負數數值部分原碼+負數數值部分原碼) = 結果值

那我有可能出現2中情況,

0《結果值<1模(此時符號位為0,結果為正數,必然不正確)

1模《結果值<2模(此種情況通過完成進製,實現符號位由0變1,運算結果正確)

通常理解的補碼

10的 補碼 01010

-8的補碼 10111+1

實際上計算機中補碼

10 的補碼 0 000 1010

-8的補碼 1 111 0111

計算過程 符號位的計算 結果是1 ,我們需要通過數值位的計算來判斷是否真為1.(負數)

0 000 1010 + 1 111 0111 不帶符號位計算時 =

0 000 1010 (正數數值部分補碼) + 1000 0000(模) - 0 000 1000(負數數值部分補碼)

如果 滿足正數部分 大於負數部分,那麼必然,這個模就存在,就發生進製 ,使得符號位的1 需要加上數值位的進製1 結果為0

那我們我們計算 -8 - 10 的時候

實際計算機中補碼

-8的補碼 1 111 1000

-10的補碼 1 111 0110

符號位計算結果預設為0

通過數值位的計算 判斷結果是否真為0

1000 0000(模) - 0000 1000(-8數值位補碼) + 1000 0000(模) - 0000 1010(-10數值位的補碼)

當兩數值位 結果在 1模 到2 模之間, 結果就是存在乙個模的進製。

那結果就是負數,此時符號位參與運算正確。

當兩數值位較大。使得結果小於1模,那麼就意味著。這個結果不正確,不正確的原因是超過,取值範圍。

出現這種情況, 是因為,負數的補碼,是需要模的配合才有意義的。對於同乙個負數。

8位為進製數的補碼。和 16位二進位制數的補碼 實際上在參與運算時,是不一樣的。

以-10為例子、

8位二進位制數的補碼 使用 1 111 0110

16位二進位制數-10的補碼 使用 1 111 1111 1111 0110

而+10 的8位二進位制數的補碼 0000 1010

而+10 的16位二進位制數的補碼 0000 0000 0000 1010

我的理解是,實際上是通過模來配合符號位運算,確定符號位是否正確的。

寫著寫著,就感覺符號位能直接參與運算,

正數在符號位參與運算時, 時候補碼過大,也會導致溢位,變成 負數。

檢視資料,發現,實際上是使用雙符號位的方式來檢測溢位的。

為什麼UWB定位能夠做到如此高的精度

隨著uwb技術不斷完善,市場需求增加,室內定位公司迎來春天。uwb定位系統是目前業界精度最高的商用無線定位系統,可實現較高的實時定位精度與定位容量,通常能夠在現實環境中獲取高達10cm 20cm的二維定位精度。世界大範圍內開始了uwb的應用。定位精度可達厘公尺級的uwb定位,不會像gps一樣把你帶到...

雙符號位補碼(用於修正單符號位補碼 法溢位)

用兩個符號位進行修正 正數符號位為 00 負數符號位為 11 當兩位符號位 為 01,10時就是溢位,這時取最高位為符號位,其他位為數值位 includeusing namespace std int binary x 6 int binary y 6 void baseconversion int...

有符號數與補碼

對於unsigned int,其資料範圍為 0,2 32 1 補碼和原碼都是對於有符號數而言的。對於int,0,2 31 1 為正數,2 31,1 為負數。對於負數 x來說,補碼表示實際上為2 n x,其中n為該數的位數,則 x與x相加剛好為0。那麼我們注意到,對於x 0,2 31 1 32位表示,...