xxy811225
級別: *
精華主題: * 篇
發(fā)帖數(shù)量: * 個
工控威望: * 點
下載積分: * 分
在線時間: (小時)
注冊時間: *
最后登錄: *
查看xxy811225的 主題 / 回貼
樓主  發(fā)表于: 2007-10-19 18:45
圖片:
H0568=8+6*16+5*256=1384
可是這個怎么算的 H8731=-30927?
xxy811225
級別: *
精華主題: * 篇
發(fā)帖數(shù)量: * 個
工控威望: * 點
下載積分: * 分
在線時間: (小時)
注冊時間: *
最后登錄: *
查看xxy811225的 主題 / 回貼
1樓  發(fā)表于: 2007-10-21 07:27
原碼、反碼、補(bǔ)碼在其BCD碼前有一個符號位,“0 ”表示正數(shù),“1”表示負(fù)數(shù)


正數(shù)的原碼、反碼、補(bǔ)碼值跟其BCD碼一致,在BCD碼前加符號位0
例 [H0568]B=0101 0110 1000
[0101 0110 1000]原=[0101 0110 1000]反=[0101 0110 1000]補(bǔ)=0 0101 0110 1000


負(fù)數(shù)的原碼在其BCD碼前加符號位“1”;反碼將其BCD碼求反(求反即1變0,0變1),然后在其前加符號位“1”;原碼是將其BCD碼求反+1,最后在其前面加符號位“1”,或者說在反碼基礎(chǔ)上+1(這種算法不正規(guī),但結(jié)果是正確的).
我們以H8731為例
因為題目提到在用BCD或十六進(jìn)制比較時,最高位(在這里是b15)為1時,將作為負(fù)的BCD值進(jìn)行比較
[H8731]原=1000 0111 0011 0001 最高位為1,所以是負(fù)數(shù)
[H8731]B=-000 0111 0011 0001
[H8731]反=1111 1000 1100 1110
[H8731]補(bǔ)=1111 1000 1100 1111=[H-78CF]=-[7*4096+8*256+12*16+15]=-30927


BCD碼有8421、余3碼、2421碼、5211碼、余3循環(huán)碼等形式。這里(通常)用的是8421碼。
在計算機(jī)中的數(shù)據(jù)都是以補(bǔ)碼存放的,這一點也是值得注意的,謝謝2樓的提示。
[ 此貼被xxy811225在2007-10-21 18:37重新編輯 ]
zhengyueyong
級別: *
精華主題: * 篇
發(fā)帖數(shù)量: * 個
工控威望: * 點
下載積分: * 分
在線時間: (小時)
注冊時間: *
最后登錄: *
查看zhengyueyong的 主題 / 回貼
2樓  發(fā)表于: 2007-10-21 12:47
學(xué)習(xí)中,謝謝各位1
xxy811225
級別: *
精華主題: * 篇
發(fā)帖數(shù)量: * 個
工控威望: * 點
下載積分: * 分
在線時間: (小時)
注冊時間: *
最后登錄: *
查看xxy811225的 主題 / 回貼
3樓  發(fā)表于: 2007-10-21 18:48
在轉(zhuǎn)兩張講相關(guān)話題的兩張貼


在修改游戲過程中,大家可能會產(chǎn)生一點疑問,一字節(jié)數(shù)據(jù)可表示的范圍是0--255,那么負(fù)數(shù)又怎么表示呢?原來在計算機(jī)中是這樣規(guī)定的,用一個數(shù)的最高一位表示正負(fù),0為正,1為負(fù).如0111,1111轉(zhuǎn)換為十進(jìn)制為127,1111,1111為-127,由此我們知一字節(jié)的范圍為-127--127,其他字節(jié)的范圍類推.
上面講的都是原碼表示法,可在計算機(jī)中的數(shù)據(jù)都是以補(bǔ)碼存放的,只有這樣才能減輕cpu的負(fù)擔(dān).提到補(bǔ)碼,就不得不提反碼了.計算機(jī)中是這樣規(guī)定反碼的,如果是正數(shù),則按原碼形式不變,如127仍為0111,1111;而如果為負(fù)數(shù)則,第一位為1,其他各位取反(即0變?yōu)?,1變?yōu)?),如原碼-127(1111,1111),表示為1000,0000.

補(bǔ)碼同上,如果是正數(shù),則按原碼形式不變,如127仍為0111,1111;如果為負(fù)數(shù)則除第一位為1外,其他各位取反加1,如-127,先取反為1000,0000,然后加1,為1000,0001.但1000,0000比較特殊,用它來表示-128,由此我們知補(bǔ)碼可表示的范圍是-128--127。
上面這種方法是我們通用的。


下面這種方法,我們通常不用,講這種方法的書也不多,電子科大出版的《脈沖與數(shù)字電路-何緒凡 》里有講。

原碼、反碼、補(bǔ)碼的定義
1、原碼的定義

①小數(shù)原碼的定義

[X]原 =[X                    0≤X <1
            [1- X    -1 < X ≤ 0

例如: X=+0.1011 , [X]原= 01011
        X=-0.1011  [X]原= 11011

②整數(shù)原碼的定義

[X]原 =[X                    0≤X <2n
              [ 2n-X        - 2n < X ≤ 0

2、補(bǔ)碼的定義

①小數(shù)補(bǔ)碼的定義

[X]補(bǔ) =[X                    0≤X <1
              [2+ X      -1 ≤ X < 0

例如:  X=+0.1011,  [X]補(bǔ)= 01011
        X=-0.1011,  [X]補(bǔ)= 10101

②整數(shù)補(bǔ)碼的定義 

[X]補(bǔ) =[X                                0≤X <2n
              [2n+1+X          - 2n ≤ X < 0




3、反碼的定義

①小數(shù)反碼的定義

[X]反 =[ X                                  0≤X <1
              [2-2n-1-X            -1 <X ≤ 0


例如:  X=+0.1011      [X]反= 01011
        X=-0.1011    [X]反= 10100

②整數(shù)反碼的定義

[X]反 =[ X                                          0≤X <2n
              [2n+1-1-X            - 2n < X ≤ 0

4.移碼:移碼只用于表示浮點數(shù)的階碼,所以只用于整數(shù)。

①移碼的定義:設(shè)由1位符號位和n位數(shù)值位組成的階碼,則 [X]移=2n + X    -2n≤X ≤ 2n
例如: X=+1011    [X]移=11011    符號位“1”表示正號
              X=-1011    [X]移=00101    符號位“0”表示負(fù)號

②移碼與補(bǔ)碼的關(guān)系: [X]移與[X]補(bǔ)的關(guān)系是符號位互為反碼,
例如: X=+1011    [X]移=11011    [X]補(bǔ)=01011
              X=-1011    [X]移=00101    [X]補(bǔ)=10101 

③移碼運(yùn)算應(yīng)注意的問題:
◎?qū)σ拼a運(yùn)算的結(jié)果需要加以修正,修正量為2n ,即對結(jié)果的符號位取反后才是移碼形式的正確結(jié)果。
◎移碼表示中,0有唯一的編碼——1000…00,當(dāng)出現(xiàn)000…00時(表示-2n),屬于浮點數(shù)下溢。
hzy
好東西,應(yīng)該大家分享。互學(xué)互進(jìn)
級別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 92 個
工控威望: 285 點
下載積分: 1515 分
在線時間: 88(小時)
注冊時間: 2007-09-19
最后登錄: 2023-07-27
查看hzy的 主題 / 回貼
4樓  發(fā)表于: 2007-10-21 20:50
看不明白,好要學(xué)習(xí)啊
雪花飄飄
級別: VIP會員

精華主題: 1 篇
發(fā)帖數(shù)量: 2620 個
工控威望: 2044 點
下載積分: 6759 分
在線時間: 3548(小時)
注冊時間: 2007-09-03
最后登錄: 2024-12-23
查看雪花飄飄的 主題 / 回貼
5樓  發(fā)表于: 2007-11-03 19:13
學(xué)習(xí)了,頂。