帶符號數的編碼 原碼 反碼 補碼

2021-10-10 07:56:46 字數 877 閱讀 9622

為什麼要引入帶符號數:在數制轉換中整數和小數部分不太一樣,類似的,正負數編碼方式不同,所以需要規定帶符號數(signed binary numbers)

編碼規則:最高位為符號位,0為正,1為負,其餘位為數值位

範圍:二進位制正負數的一般定點(浮點有其他方法)方法

原碼反碼補碼在符號位是相同的

正數的原碼反碼補碼相同,主要是負數有區別

表示方法:符號加數值

正負數的原碼表示方法相同

正數的一補同正數的原碼

負數的一補符號位為1,數值按位取反

注意所要求的位數,表示時可能要在符號位後補一位0

補碼是最常用的,原因有二。原因一:原碼和一補表示時會有+0和-0的兩種表示,與數學中不一樣;原因二:原碼和一補計算時值會有問題

正數的二補與它的原碼相同

負數的符號位為1,數值位計算:

方法一是「取反加一」。

第二種方法是2^n+n(n為負數時的補)

二補還原為原碼的兩種方法

再求補(補補為原)

減一取反

與前面兩種編碼的不同

二補沒有-0

二補在負數上比原碼多表示乙個數,可以到-2^(n-1)

補碼的計算

補碼更適合帶符號數的二進位制數的計算

減法轉換為+負數

減法是可能會進製,但是需要捨掉最高位保證位數不變(位數不超就可以)

加法時,可能會字長不夠,需要補位

注意字長(bits),過長需舍首位,短了需要補0

注意範圍,二補因為只有乙個0,在負數上比原碼多表示乙個數

注意是用帶符號數去表示常用正負數,所以運算需要匹配,所有的規則都是為了運算匹配。例如0和1只是代表正負,不能在直接運算中起到正負號的效果,所以如有不匹配需要靈活變通。

原碼,反碼,補碼,有符號數和無符號數

請先看以下博文 原碼,反碼,補碼 詳解 c語言系列 二 有符號數和無符號數詳解 有符號數,無符號數 對於乙個二進位制數,它可以是有符號數,也可以是無符號數,具體是哪個,由 決定。比如 1000 0001無符號數 當前二進位制的大小,即1000 0001表示129 有符號數 將最左邊一位做為符號位,剩...

符號數表示 原碼 反碼 補碼

計算機中的符號數有三種表示方法,即原碼 反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示 正 用1表示 負 而數值位,三種表示方法各不相同。在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理 同時,加法和減法也可以統一處理。此外,補碼與原...

有符號數的原碼 反碼 補碼詳解

有符號數 signed d 符號位 數值位 例如 int i 7 int 型別佔4個位元組,1個位元組佔8個位,int佔32個位元位 7 根據8421碼得到二進位制原碼 0b00000000000000000000000000000111 int 型別的表數範圍 計算機中儲存有符號數的時候是按照補碼...