6.1有符号数和无符号数
6.1.1无符号数
计算机中的数均放在寄存器中,通常称寄存器的位数为机器字长。所谓无符号数,即没有符号的数,在寄存器中的每一位均可用来存放数值。当存放有符号数时,则需留出位置存放符号。因此,在机器字长相同时,无符号数与有符号数所对应的数值范围是不同的。以机器字长为16位为例,无符号数的表示范围为0~65535,而有符号数的表示范围为-32768~+32767.
6.1.2有符号数
1.机器数与真值
对有符号数而言,符号的"正"“负”机器是无法识别的,但由于“正”、“负”恰好是两种截然不同的状态,如果用“0”表示“正”,用“1”表示“负”,这样符号也被数字化了,并且规定将它放在有效数字的前面,即组成了有符号数。
把符号“数字化”的数称为机器数,而把带“+”或“-”符号的数称为真值。一旦符号数字化后,符号和数值就形成了一种新的编码。在运算过程中,符号为能否和数值部分一起参与运算?如果参加运算,符号位又需做哪些处理?这些问题都与符号位和数值位所构成的编码有关,这些编码就是原码、补码、反码和移码。
2.原码表示法
原码是机器数中最简单的一种表示形式,符号位为0表示正数,符号位为1表示负数,数值位即真值的绝对值,故原码表示又称为带符号的绝对值表示。为了书写方便以及区别整数和小数,约定整数的符号位与数值位之间用逗号隔开;小数的符号位与数值位之间用小数点隔开。例如上面四个数的原码分别是0.1011、1.1011、0,1100、1,1100。由此可得原码的定义:
原码表示简单明了,并易于和真值转换。但用原码进行加减运算时,却带来了许多麻烦。
3.补码表示法
(1)补数的概念
例:-3和+9对时钟而言其作用是一致的。
可见,只要确定了“模”,就可找到一个与负数等价的正数(该正数即为负数的补数)来代替此负数,这样就可以吧减法运算用加法实现。
有如下结论:
--一个负数可用它的正补数来代替,而这个正补数可以用模加上负数本身求得
--一个正数和一个负数互为补数时,它们绝对值之和即为模数。
(2)补码的定义
4.反码表示法
可知:由于“零”在补码中只用一种表示形式,故补码比原码和反码可以多表示一个负数