在c语言中,我们用sizeof已经得知整数类型的字节大小是4,显而整数的字节大小亦为4,32个bit
而整数有正数和负数之分。而只要是整数,计算机内存中存储的是二进制的补码,而计算机运行后显示的结果是二进制的原码。
我们就由正数2来进入原码 反码 补码的学习
首先规定正数的原码 反码 补码 是一样的,以正数2的原码来入题
正数2的原码为
00000000000000000000000000000010(这是32个二进制数组成)
在上面由32个(1或0)组成的原码中 第一位是标识符,当标识符为0时,则十进制数为正数
当标识符为1时,十进制数为负数。
由于正数的原码 反码 补码都是一样的,这里就不过多简述了。
重点是负数的原码 反码 补码(这三个是不一样的)
在计算机内存中存储的是负数的补码,但是运行后的结果显示的屏幕上是负数的原码
那么负数之间原码 补码之间是如何转化的呢?
原码 | 反码 | 补码 |
符号位不变其余位按位取反得到反码 | 反码+1得到补码 | |
符号位不变其余位按位取反得到原码 | 补码-1得到反码 |
来个例子来解释
如-2 原码如下
10000000000000000000000000000010
转化为反码(原码按位取反)就是
11111111111111111111111111111101
转化为补码(反码+1)就是
11111111111111111111111111111110