本文共 1377 字,大约阅读时间需要 4 分钟。
原码
数的最高位为符号位,符号位为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)
原码的定点小数与定点整数定义:
补码
正数采用符号-绝对值表示,即数的最高有效位为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可表示为 | 1000 | 0000 | 0111 | 0101 |
按位求反后为 | 1111 | 1111 | 1000 | 1010 |
末位加1后为 | 1111 | 1111 | 1000 | 1011 |
用十六进制数表示为 | F | F | 8 | B |
-46的原码表示 | 1010 | 1110 |
按位求反 | 1101 | 0001 |
末位加1 | 1101 | 0010 |
用十六进制数表示 | D | 2 |
转载地址:http://lssli.baihongyu.com/