xxy811225
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看xxy811225的 主题 / 回贴
楼主  发表于: 2007-10-19 18:45
图片:
H0568=8+6*16+5*256=1384
可是这个怎么算的 H8731=-30927?
xxy811225
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看xxy811225的 主题 / 回贴
1楼  发表于: 2007-10-21 07:27
原码、反码、补码在其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码。
在计算机中的数据都是以补码存放的,这一点也是值得注意的,谢谢2楼的提示。
[ 此贴被xxy811225在2007-10-21 18:37重新编辑 ]
xxy811225
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看xxy811225的 主题 / 回贴
2楼  发表于: 2007-10-21 18:48
在转两张讲相关话题的两张贴


在修改游戏过程中,大家可能会产生一点疑问,一字节数据可表示的范围是0--255,那么负数又怎么表示呢?原来在计算机中是这样规定的,用一个数的最高一位表示正负,0为正,1为负.如0111,1111转换为十进制为127,1111,1111为-127,由此我们知一字节的范围为-127--127,其他字节的范围类推.
上面讲的都是原码表示法,可在计算机中的数据都是以补码存放的,只有这样才能减轻cpu的负担.提到补码,就不得不提反码了.计算机中是这样规定反码的,如果是正数,则按原码形式不变,如127仍为0111,1111;而如果为负数则,第一位为1,其他各位取反(即0变为1,1变为0),如原码-127(1111,1111),表示为1000,0000.

补码同上,如果是正数,则按原码形式不变,如127仍为0111,1111;如果为负数则除第一位为1外,其他各位取反加1,如-127,先取反为1000,0000,然后加1,为1000,0001.但1000,0000比较特殊,用它来表示-128,由此我们知补码可表示的范围是-128--127。
上面这种方法是我们通用的。


下面这种方法,我们通常不用,讲这种方法的书也不多,电子科大出版的《脉冲与数字电路-何绪凡 》里有讲。

原码、反码、补码的定义
1、原码的定义

①小数原码的定义

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

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

②整数原码的定义

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

2、补码的定义

①小数补码的定义

[X]补 =[X                    0≤X <1
              [2+ X      -1 ≤ X < 0

例如:  X=+0.1011,  [X]补= 01011
        X=-0.1011,  [X]补= 10101

②整数补码的定义 

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




3、反码的定义

①小数反码的定义

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


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

②整数反码的定义

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

4.移码:移码只用于表示浮点数的阶码,所以只用于整数。

①移码的定义:设由1位符号位和n位数值位组成的阶码,则 [X]移=2n + X    -2n≤X ≤ 2n
例如: X=+1011    [X]移=11011    符号位“1”表示正号
              X=-1011    [X]移=00101    符号位“0”表示负号

②移码与补码的关系: [X]移与[X]补的关系是符号位互为反码,
例如: X=+1011    [X]移=11011    [X]补=01011
              X=-1011    [X]移=00101    [X]补=10101 

③移码运算应注意的问题:
◎对移码运算的结果需要加以修正,修正量为2n ,即对结果的符号位取反后才是移码形式的正确结果。
◎移码表示中,0有唯一的编码——1000…00,当出现000…00时(表示-2n),属于浮点数下溢。