这篇博客是对于我个人的知识的复习,当然如果有某位大佬能够指出这里面有哪些概念含糊不清或者难懂,麻烦指出来感激不尽。
原反补码
放出链接原返补码深入探究
在大学的C语言课堂上,可能就接触到了原反补码的概念,大学老师说,正数的原反补码就它本身,负数的反码就是符号位不变,其他数值取反,补码则是反码+1.
但是为什么,我从大一开始就有这个疑惑,为什么正数就不用变,负数则要这么复杂?
直到我拜读了刀斧手何在大大的博客才解开了我的迷惑豁然开朗。
原码
正码反码补码的存在是为了解决二进制数字中存在符号位情况下的减法运算。
正数和正数的加法,负数和负数的加法使用原码问题不大,只要把符号位变正确就足够了,但是正数和负数相加会产生错误,因此有了反码的产生。
反码的产生
用反码来进行加减运算会发现,正数相加和正负数相加结果正确,而负数相加则会产生错误,不过问题不大,因为两个负数相加可以认为让两个数的绝对值相加,然后改变符号位。
上面的方法有一个小瑕疵,11110+00001 = 11111(-0),两个相反数相加的结果是-0,显得很怪异,因此有了补码。
补码
补码的思想和模有关系,