首页 > 编程知识 正文

原码反码补码转换例题,补码的补码是原码

时间:2023-05-04 04:15:03 阅读:174716 作者:839

本文简要总结了原码、反码、补码的计算和由来。

机器数量和真值

机器的数量

数在计算机中的二进制表示,称为此数的机器数。 随机数有符号,计算机用一个数的最高有效位存储符号,正数为0,负数为1。

例如,十进制数中的数3,计算机的字长为8位,转换为二进制数时为00000011。 -3表示10000011。 这里的00000011和10000011是机器数量。

真值

第一位是符号位,因此机器数量的型号值不等于真数值。 例如,上面的符号10000011的最高有效位1表示负,其真值为-3而不是形式值131。 (10000011转换为十进制后就是131。 为了进行区别,将与带符号位的机器数量相对应的真数值称为机器数量的真值。

原码、反码、补码的基础概念和计算方法

原码、反码、补码是机器存储具体数字的编码方式。

原始代码

原代码是在符号位上加上真值的绝对值,第一位表示符号,剩下的位表示值。 例如,在8位二进制情况下:

[ 1]原=0000 0001

[-1]原=1000 0001

由于第1位是编码位,因此8位二进制的取值范围为[ 111111,0111111 ],即[-127,127 ]。

源代码是人脑最容易理解和计算的表示方法。

反码

正数的反符号本身。

负数的逆编码基于其原始编码,一已编码比特不改变,而剩馀的每一比特取逆。

以下是一个例子。

[ 1]=[00000001]原=[00000001]反

[-1]=[10000001]原=[11111110]反

当反码表示负数时,人脑无法直观识别该数值,通常将其转换成原始代码进行计算。

补充代码

正数补数本身。

负数的补数根据其原始代码,符号的位不变。 剩下的位相反,成为最后的1。 (即根据反码1 ) )。

以下是一个例子。

[ 1]=[00000001]原=[00000001]反=[00000001]补

[-1]=[10000001]原=[ 111111110 ]反=[11111111]补

对于负数,补数表示方式由于人脑无法直观识别其数值,通常需要转换为原始代码计算其数值。

原代码、逆向代码、补充代码的由来

人脑可以知道第一位是符号位,计算时根据符号位,选择真值区域的加减。 但是,对于计算机来说,加减乘数已经是最基础的运算,需要尽量简单地设计。 明确了计算机判别“符号位”会使计算机的基础电路设计非常复杂! 于是人们想出了符号位也参加运算的方法。 可以看出,从算法中减去正数会加上负数。 即,1-1=1(-1 )=0。 因此,机器只需要加法运算,不用减法运算,计算机运算的设计变得简单。

源代码:

正数

正数(源代码)

负数

负数(原始代码) )

0

0000

0

1000

1

0001

-1

1001

2

0010

-2

1010

3

0011

-3

1011

4

0100

-4

1100

5

0101

-5

1101

6

0110

-6

1110

7

0111

-7

1111

1和- 1相加等于0,但计算机只能计算出00011001=1010(-2 )。

为了解决“正负相加等于0”的问题,在“原代码”的基础上,发明了“反码”:

正数

正数(反符号) )

负数

负数(负号) )

0

0000

0

1111

1

0001

-1

1110

2

0010

-2

1101

3

0011

-3

1100

4

0100

-4

1011

5

0101

-5

1010

6

0110

-6

1001

7

0111

-7

1000

“原代码”变为“反代码”时,完美解决了“正负相加为0”的问题。 过去的1和- 1相加后,得出了0001 1101=1111。 正好是逆向代码的表示方式,1111象征着- 0。

人们总是在努力进步,在历史遗留的问题——中存在两个零,有0和-0。 我们希望只有一个0,所以发明了“补数”。 同样对“负数”进行了处理。 在原始“反向代码”的基础上,添加新代码。 (1)。

正数

正数(补数) )

负数

负数(补数) )

0

0000

0

0000

1

0001

-1

1111

2

0010

-2

1110

3

0011

-3

1101

4

0100

-4

1100

5

0101

-5

1011

6

0110

-6

1010

7

0111

-7

1001

-8

1000

得必有失,补第一名的时候,必须舍弃最高位。 处理“反符号”中的“-0”。 1111加1,就是10000,舍弃最高位就是0000,正好和左边正数的0完全融合。 这将解决0和- 0同时存在的问题。

另外,“正数加负数等于0”的问题也同样得到满足。 例如,3和(3)相加的话,0011 ) 1101=10000(0,舍弃最高位的话,就是0000 )。

以上就是“补数”的存在方式。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。