计算机原码反码补码

更新时间:2024-03-11 01:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

在数学中是将正号+ 负号- 放在绝对值前边表示该数是正数还是负数的,计算机只能识别0和1,使用的是二进制。计算机中就用一个数的最高位作为符号位,并用0表示正数,1表示负数。这样数的符号也可以用数字表示了。在计算机中,负数的二进制有3种表示方法:原码、反码和补码。任何正数的原码反码和补码形式完全相同,而负数则有各种不同的表示形式。

那么在计算机中,我们用二进制来表示数,所有的数可以分成两部分。一部分是符号,另一部分是数值,所以用二进制表示出来的数也就有了符号位和数值位之分。如果只表示一个数,我们称之为:真值;既有数又有符号的我们称之为机器码。 正整数:

原码,补码,反码的符号位固定为0,数值位都是真值。所以一个正整数的原码,补码,反码是相同的。 负整数:

原码,补码,反码的符号位固定为1不变,数值位不相同。 原码的数值位是真值;

反码:原码数值位的每一位二进制数位求反得到; 补码:反码数值位最低位加1得到。 一.原码

8

原码:0000,1000 -8

原码:1 000,1000

二.反码

8

反码:0 000,1000 -8

反码:1 111,0111

三.补码

8

补码:0 000,1000 -8

补码:1 111,1000

为什么要用到原码、反码、补码

原码求和运算的问题: 假设字长为8bits 十进制 (1) 10 - (1)10 = (1)10 + (-1)10 = (0)10

按照原码的表示规则,十进制的1 的原码是 00000001, 十进制的-1 原码是 10000001

二进制 (0 0000001)原 + (1 0000001)原 = (1 0000010)原 = ( -2 ) 显然不正确。 当1-1 就相当于 1+(-1) 执行二进制运算时结果为10000010 是-2 结果是错误的!!! 解决问题方案: 在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上。对除符号位外的其余各位逐位取反就产生了反码。反码的取值空间和原码相同且一一对应。 反码的减法运算: 十进制: (1)10 - (2)10 = (1)10 + (-2)10 = (-1)10

二进制: (0 0000001)反 + (1 1111101)反 = (11111110)反 = (-1) 正确。 反码求和运算的问题: 十进制: (1)10 - (1)10 = (1)10 + (-1)10 = (0)10

二进制:(0 0000001)反 + (1 1111110)反 = (1 1111111)反 = ( -0 ) 有问题。

问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的。

补码求和运算: 负数的补码就是对反码加一,而正数的补码不变,正数的原码反码补码是一样的。 十进制: (1)10 - (1)10 = (1)10 + (-1)10 = (0)10

二进制:(0 0000001)补 + (1 1111111)补 = (0 0000000)补 = ( 0 ) 正确。

十进制:(1)10 - (2)10 = (1)10 + (-2)10 = (-1)10

二进制:(00000001)补 + (11111110)补 = (11111111)补 = (-1) 正确。

所以补码的设计目的是:

⑴ 使符号位能与有效值部分一起参加运算,从而简化运算规则。补码机器数中的符号位,并不是强加上去的,是数据本身的自然组成部分,可以正常地参与运算。

⑵ 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。

本文来源:https://www.bwwdw.com/article/vv98.html

Top