字节和位:
字节byte:数据存取和数值计算的基本单元。
从内存中读取数据是以字节为单位,
向内存中写入数据也是已字节为最小单位,
将数值输出到文件和从文件获取数值时,最小单位也是字节。
位:大部分操作系统中,一个字节由8个位组成。
字长word
① 非负数的补码:与原码相同。
② 负数的补码:符号位为1,其余位为该数绝对值的原码按位取反后,再加1.
8位的2进制,最高位用于表示符号,剩余7位表示数值。
例:原码 -> 补码 【以8位机为例】
十进制数 原码 补码
11 0000,1011 0000,1011
-15 1000,1111 (1111,0000+1)=1111,0001
例:补码 -> 原码
十进制数 补码 原码
11 0000,1011 0000,1011
-15 1111,0001 (1,000,1110+1)=1000,1111
|
【+0和-0的补码都为0000,0000】 |
|
(-128) 【多余补码形式的数】 1,000,0000 -128
补码的设计目:
⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.
⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计.
例:补码的乘法运算
十进制数 原码 补码
-11 ---- 1000,1011 ---- 1111,0101
× 10 ---- 0000,1010 ---- 0000,1010 ×
--------------------------------------
-110 0
| 11110101
| 11110101
| --------------
| 100110010010
| ---- 1110,1110 ---- 1001,0010
位运算:对数据的二进制位进行处理的运算。
1 原码和补码:
假设机器字长为8
已知一个数的补码,其求原码的过程,与已知原码求补码的过程完全一样。
负数的补码有一个更简单的记忆方法:
符号位不变,其它的从低位开始,直到遇到第一个1之前,什么都不变,遇见第一个1之后,保留这个1,以后按位取反。例如:[-7]原=10000111B --> [-7]补=11111001B
扩展:补码的计算
使用补码计算时,可以将符号位和其他位统一处理。
二进制 十进制 机器数(也是原码) 机器数的真值 反码 补码
0000,0000 0 0,000,0000 +0 0,000,0000 0,000,0000<---|
0000,0001 1 0,000,0001 1 0,000,0001 0,000,0001 |
0000,0010 2 0,000,0010 2 0,000,0010 0,000,0010 |
0000,0011 3 0,000,0011 3 0,000,0011 0,000,0011 |
... |
0111,1101 125 0,111,1101 125 0,111,1101 0,111,1101 |
0111,1110 126 0,111,1110 126 0,111,1110 0,111,1110 |
0111,1111 127 0,111,1111 127 0,111,1111 0,111,1111 |
1000,0000 128 1,000,0000 -0 1,111,1111 0,000,0000----|
1000,0001 129 1,000,0001 -1 1,111,1110 1,111,1111
1000,0010 130 1,000,0010 -2 1,111,1101 1,111,1110
1000,0011 131 1,000,0011 -3 1,111,1100 1,111,1101
...
1111,1110 253 1,111,1101 -125 1,000,0010 1,000,0011
1111,1110 254 1,111,1110 -126 1,000,0001 1,000,0010
1111,1111 255 1,111,1111 -127 1,000,0000 1,000,0001