原碼、反碼、補碼在其BCD碼前有一個符號位,“0 ”表示正數,“1”表示負數
正數的原碼、反碼、補碼值跟其BCD碼一致,在BCD碼前加符號位0
例 [H0568]B=0101 0110 1000
[0101 0110 1000]原=[0101 0110 1000]反=[0101 0110 1000]補=0 0101 0110 1000
負數的原碼在其BCD碼前加符號位“1”;反碼將其BCD碼求反(求反即1變0,0變1),然后在其前加符號位“1”;原碼是將其BCD碼求反+1,最后在其前面加符號位“1”,或者說在反碼基礎上+1(這種算法不正規,但結果是正確的).
我們以H8731為例
因為題目提到在用BCD或十六進制比較時,最高位(在這里是b15)為1時,將作為負的BCD值進行比較
[H8731]原=1000 0111 0011 0001 最高位為1,所以是負數
[H8731]B=-000 0111 0011 0001
[H8731]反=1111 1000 1100 1110
[H8731]補=1111 1000 1100 1111=[H-78CF]=-[7*4096+8*256+12*16+15]=-30927
BCD碼有8421、余3碼、2421碼、5211碼、余3循環碼等形式。這里(通常)用的是8421碼。
在計算機中的數據都是以補碼存放的,這一點也是值得注意的.