计算机中的原码、反码和补码
Contents
计算机中的原码、反码和补码
一、机器数和真值
- 机器数
数在计算机中的二进制表示形式就称为机器数。机器数是带符号的,在计算机用一个数的最高位存放符号 (0为正,1为负) ,将数的符号数值化。
十进制中的数 +5 ,计算机字长为8bits,转换成二进制就是00000101。如果是 -5 ,就是 10000101 。
00000101 和 10000101 就是机器数。
真值
因为符号占据一位,机器数的形式值就不等于真正的数值。例如上面的有符号数 10000101,其最高位1代表负,其真正数值是 -5 而不是形式值133 (10000101转换成十进制等于133) 。所以,为区别起见,带符号位的机器数对应的真正数值称机器数的真值。
例: 00100001的真值 = 0 0100001 = +33,10100011的真值 = 1 0100011 = -35
二、计算机符号数的表示方法
符号数值化后,为了方便地对机器数进行算术运算,提高运算速度,人们设计了符号数的各种编码方法,最常见的有原码、反码和补码。
原码
原码就是符号位加上真值的绝对值。简单说,就是符号位加上数的二进制表示。比如,+3 (以8bit为例) ,符号位为0,3转化为二进制就是11,那么 +3 的原码就是00000011 (不足部分补0) 。同理, -3,符号位为1,3转化为二进制就是11,那么 -3 的原码就是10000011 (不足部分补0) 。即:
[+3] = [00000011]原
[-3] = [10000011]原
反码
一个负数的符号位不动,其余位取反,就是机器数的另一种表示形式——反码。正数的反码与原码形式一样。
[+3] = [00000011]原 = [00000011]反
[-3] = [10000011]原 = [11111100]反
补码
正数的原码反码补码是一样的。补码符号位不变化其余各位原码取反(反码)+1换言之 反码+1
windows计算器的二进制: BIN: 二进制,注意这里的二进制为二进制补码形式
[+3] = [00000011]原 = [00000011]反 = [00000100]补
[-3] = [10000011]原 = [11111100]反 = [11111101]补
十进制 | 原 | 反 | 补 |
---|---|---|---|
-128 | 10000000 | 11111111 | 10000000 |
-127 | 11111111 | 10000000 | 10000001 |
-1 | 10000001 | 11111110 | 11111111 |
127 | 01111111 | 01111111 | 01111111 |
正数: 它的原码、反码、补码相同。
负数: 反码符号位不变化,其余位数取反,补码符号位不变化其余各位原码取反(反码)+1换言之 反码+1
Author -
LastMod 2011-07-03