最近在入门课里学习了原码反码补码,有些地方理解起来还是比较困难的,所以用一篇文章来梳理一下。
首先我们要考虑这三个码的作用。我们都知道,计算机在储存信息时是使用二进制的(通过电信号的有无来表示0和1),而在C语言中数字类型都是默认有符号位的(在二进制中),这里出现了一个问题:
我们取int数字1,它的二进制为:
00000000000000000000000000000001
而-1的二进制为:
10000000000000000000000000000001
那么数字0呢?难道会出现:
00000000000000000000000000000000和
10000000000000000000000000000000吗?
此时出现了非常严重的问题!数字0出现了两种表达方式:+0和-0,这种模棱两可的情况在编程里是绝对不能出现的。
因此C语言引入了原码反码补码的概念,在将数字转化为二进制存入内存中时,针对全体负数使用转化为反码和补码的方式避开-0,对原码按位取反加1,符号位不变。这样就好理解了