计算机组成原理第六章

计算机组成原理第六章
计算机组成原理第六章

计算机组成原理第六章

问题

原码、反码、补码都是什么?

为什么有时候会在计算机看到中文乱码的情况?

二进制

二进制就是「逢二进一」,跟十进制没有什么本质区别。

二进制转换到十进制

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

相关主题
相关文档
最新文档