ps 如无非凡阐明,应用的是
8
位字长
两个机器数的加法运算:00001110 + 10001110 = 10011100
把这两个机器数看成是无符号数相加,那么他们的后果没有问题:
00001110
->14
10001110
->142
10011100
->156
把这两个数看成是有符号数相加,这就呈现了问题:
00001110
->14
10001110
->-14
10011100
≠0
如何修改这个问题呢?如果看到 1
结尾的有符号数,取它的绝对值进行相加
00001110
->14
-
00001110
->-
14
00000000
->0
让计算机实现这样一个转换,老本是挺大的,有什么办法能够实现这点呢?
0
在在计算机中是 00000000
,那当初有一个数 100000000
在 8
位计算机中是不是也是 0
,因为它溢出了,最高位的 1
会被舍弃。
当初只有找到一个数和 00001110
相加,失去的后果是 100000000
,舍弃高位不也等于 0
么。
用手动计算 100000000 - 00001110
失去 11110010
。
11110010
和 00001110
之间的关系:
10001110
和00001110
之间的关系是互为相反数10001110
数值位取反得11110001
11110001
开端 +1
得11110010
在看补码的定义:如果符号位是 1
,数值位取反,开端 + 1
这就实现了将减法运算转变成了加法运算。