源码、反码、补码
引入原码、反码和补码的目的是为了解决减法问题。因为计算机CPU的运算器中只有加法器,要把减法转化成加法来计算。
计算机中没有减法器的原因
在做减法运算时,如果两个数十用原码表示的,则首先需要比较两个数绝对值的大小,然后以绝对值大的一个作为被减数、绝对值小的一个作为减数,求出差值,并以绝对值大的一个数的符号作为差值的符号。不难看出,这个操作过程比较麻烦,而且需要使用数值比较电路和减法运算电路。如果能用两数的补码相加代替上述的减法运算,那么计算过程中无需使用数值比较电路和减法运算电路了,从而使运算器的电路结构大为简化。
原码:将一个整数,转换成二进制,就是其原码。
反码:正数的反码就是其原码;负数的反码是将原码中除符号位以外,每一位取反。
补码:正数的补码就是其原码;负数的补码是反码+1;如单字节5的补码为:0000 0101;-5的原码为1111 1011。
1.二进制数中,两数的补码之和等于两数和的补码。
2.补码=反码+1
3.反码=原码除符号位外其他数值取反(即该数的绝对值取反),即“0”变“1”,“1”变“0”。
4.任何正数的原码、反码、补码的形式完全相同。
5.在计算机中,有符号的数都是采用补码来表示的。
6.计算的时候,符号位也参与运算。
例子:使用补码计算“-16+11”的运算:
1 1 1 1 0 0 0 0 + -16的补码
0 0 0 0 1 0 1 1 11的补码
__________________
1 1 1 1 1 0 1 1 -5的补码
如果是“-16-11”,那么久转化为加法运算“-16+(-11)”
1 1 1 1 0 0 0 0 + -16的补码
1 1 1 1 0 1 0 1 -11的补码
———————————
1 1 1 1 0 0 1 0 1 -27的补码
本文出自 “德泽无忧” 博客,请务必保留此出处http://dezewuyou.blog.51cto.com/2628602/1903173
原文地址:http://dezewuyou.blog.51cto.com/2628602/1903173