原码 补码

  原码

  数的最高位为符号位,符号位为0表示正数,符号位为1表示负数,其余有效数值部分用二进制的绝对值表示。例如,假设机器字长为8位,则[+1]原 = 00000001,[-1]原 = 10000001。

  范围

  定点小数:-1<X<1,定点正数:-2n<X<2n 或 -(2n-1) ≤ X ≤ 2n-1

  真值

  第一位是符号位,在表示负数时,机器数的形式值并不等于真正的数值。例如 10000001,最高位1代表负,其真正数值是 -1,而不是形式值129(10000001转换成十进制等于129)。为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

  原码加减运算

  原码加减,是指操作数与运算结果均用原码表示,运算时将尾数进行加减,符号位单独处理。将八种加减运算可以归并为四类操作。

  (+A)+(+B)=(+A)-(-B)

  (-A)+(-B)=(-A)-(+B)

  (+A)+(-B)=(+A)-(+B)

  (-A)+(+B)=(-A)-(-B)

  原码的定点小数与定点整数定义:http://www.baike.com/wiki/%E5%8E%9F%E7%A0%81

  补码

  正数采用符号-绝对值表示,即数的最高有效位为0表示符号为正,数的其余部分则表示数的绝对值。例如,假设机器字长为8位,则[+1]补 = 00000001,[+127]补 = 01111111,[+0]补 = 00000000。

  负数X用2的n次方-|X|来表示,其中n为机器的字长。当n=8时,[-1]补 = 2的8次方 - 1 = 11111111,而[-127]补 = 2的8次方 - 127 = 10000001,显示,最高有效位为1表示该数的符号为负。应该注意,[-0]补 = 2的8次方 = 00000000,所以在补码表示法中0只有一种表示,即00000000。对于10000000这个数,在补码表示法中被定义为-128。这样,8位补码表示数的范围为-128~+127。
  变反加1法:即原码的符号位不变,然后将其余位变反(即0变为1,1变为0),最后在末位(最低位)加1,就可以得到该负数的补码表示了。
  例:机器字长为16位,写出N = -117的补码表示。
-117可表示为1000000001110101
按位求反后为1111111110001010
末位加1后为1111111110001011
用十六进制数表示为FF8B
  即[-117]补 = FF8B
  例:机器字长为8位,则-46的补码表示。
-46的原码表示10101110
按位求反11010001
末位加111010010
用十六进制数表示D2
  即[-46]补 = D2H
  第三种求法:原码符号位不变,自低位向高位检查,第一个1及以前各位0不变,以后各位按位变反。
  符号扩展问题。对于用补码表示的数,正数的符号扩展应该在前面补0,而负数的符号扩展则应该在前面补1。例如,我们已经知道如机器字长为8位,则[+46]补 = 00101110,[-46]补 = 11010010;如果要把它们从8位扩展到16位,则
  [+46]补 = 0000000000101110 = 002EH  [-46]补 = 1111111111010010 = FFD2H
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值