</div>
一、带符号二进制数表示 1、什么是字长? 计算机数据线一次能传送的最大的二进制数的位数。常用的字长: 8位、 16位、 32位 ↓ ↓ ↓ Z80 IBMPC 80386 Apple PC/XT 80486 PC/AT 2、无符号二进制数 在字长范围内,所有二进制位都是数值位。 字长8位: 0~255 00H~FFH 字长16位: 0~65535 0000H~FFFFH 字长32位: 0~4294967295 0000 0000H~FFFF FFFFH 3、有符号二进制数 在字长范围内,最高二进制位为符号位,其余位为数值位。 字长8位:数值范围 80H~7FH -128~+127 字长16位: 8000H~7FFFH -32768~+32767 字长32位: 8000 0000H~7FFF FFFFH -2147483648~+2147483647 二、带符号数的补码表示 在计算机中,任何一个带符号数,都是以补码的形式进行存贮和管理的。 1、带符号数的原码表示 最高位为符号位,其余位是数值位。 [+121]原= 0111 1011 0000000001111011 [-121]原= 1111 1001 1000000001111001 [+0]原= 0000 0000 0000000000000000 [-0]原= 1000 0000 1000000000000000 2、补码表示 (1)正数,同原码 (2)负数,原码的每一位(符号位除外)取反,再在末位加1 例:字长8位,求-11的补码 原码 1000 1011 各位取反 1111 0100 末位加1 1111 0101 例:字长8位,求-0的补码 原码 1000 0000 各位取反 1111 1111 末位加1 0000 0000 还有一种办法可以写出一个负数的补码: 令 例: [-1]补= [-127]补= [-64]补= [-5]补= [-128]补= 3、由补码求真值(补码对应的十进制数) 原码就是数字本身,例如: (+7)的原码=0000 0111 最高位为符号位(0表示正数) (–7)的原码=1000 0111 最高位为符号位(1表示负数) 反码就是将原码按位求反(符号位不变),例如: (+7)的反码=0111 1000 符号位不变 (–7)的反码=1111 1000 符号位不变 从计算机运算的角度来讲,“符号位不变,将原码求反再加一”的算法是很方便的,但对于读者理解补码的概念没有多大帮助。 例如:求(–7)的补码。 注意:当负数以补码的形式表示时,求该数的原值仍用“求反再加一”的方法,例如, 如果是正数,就不能用上述方法。正数的补码就是该数的本身,所以本书中不引入“正数的补码就是原码”的概念。 其实补码是针对负数来说的,计算机中只有加法器(没有减法器),引入补码的目的是为了将减法计算变为加法计算。 有了只有负数才有补码的概念后,我们就可将注意力放在负数上。让我们以时钟来说明补码的概念,见表1-1。 表 1-1
|