计算机组成原理第六章
![计算机组成原理第六章](https://img.360docs.net/img45/1828k6df2x3zye0a61asxormqtqrtgxw-51.webp)
![计算机组成原理第六章](https://img.360docs.net/img45/1828k6df2x3zye0a61asxormqtqrtgxw-02.webp)
计算机组成原理第六章
问题
原码、反码、补码都是什么?
为什么有时候会在计算机看到中文乱码的情况?
二进制
二进制就是「逢二进一」,跟十进制没有什么本质区别。
二进制转换到十进制
0011 = 0 × 2^3 + 0 × 2^2 + 1 × 2^1 + 1 × 2^0 = 3
十进制转换二进制,可以使用短除法,下面演示13转换成二进制1101
商余数二进制位
13 / 2 6 1 1
6 / 2 3 0 0
3 / 2 1 1 1
1 /
2 0 1 1
原码
是指一个二进制数左边加上符号位所得到的码,二进制数大于0时,符号位为0,二进制数小于0时,符号位为1。
计算机中所有的数均用0、1编码表示,数字的正负号也不例外,如果一个机器数字长是n位的话,约定最左边一位用作符号位,其余n-1位用于表示数值。
小数原码定义
null
例如:[+0.1011]原= 0.1011000,[-0.1011]原= 1.101100
代码中的小数点“.”是在书写时为了清晰起见加上去的,在机器中并不出现。
整数原码定义
null
例如:[+1011]原=00001011,[-1011]原=10001011
原码优点
简单直观;例如,我们用8位二进制表示一个数,则+11的原码为
00001011,-11的原码就是10001011。
原码缺点
原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,而在二进制中00000001+10000001=10000010,换算成十进制为-2。显然出错了。
补码
是一种用二进制表示有符号数的方法,也是一种将数字的正负号变号的方式。
下面用4位的补码数字来说明补码系统的数字表示方式。
在表示正数和零时,补码数字和一般二进制一样,唯一的不同是在补码系统中,正数的最高比特恒为0,因此4位的补码正数,最大数字为0111 (7)。
补码数字的负数,最高比特恒为1,4位补码的数字中,最接近0的负数为1111 (-1),以此类推,因此绝对值最大的负数是1000 (-8)。
以上的表示方式在电脑处理时格外方便,用以下的例子说明:
0011 (3)
+ 1111 (-1)
--------------
10010 (2)
10010似乎是错的,但是结果超过四个比特,忽略第五个比特,结果是0010(2),跟计算结果时一样的。
另外还可以将1111变号为0001(1),那上面的是式子也可以当作减法计算3-1=2,结果还是一样的。
原码求补码
在计算二进制数字的补码时,会将数字进行比特反相运算,再将结果加1,不考虑溢出比特(一般情形,溢出比特会为0),就可以得到该数字的补码。
正数和0的补码就是该数字本身。
负数的补码则是将其对应正数按位取反再加1。
-5 => 对应整数=> 00000101 => 按位取反=> 11111010 => +1 => 11111011