有关原码,反码,补码那些事

Posted wx62ea40c27656c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关原码,反码,补码那些事相关的知识,希望对你有一定的参考价值。

我学c语言时,刚遇到原码,反码,补码,那可搞的我花了不少时间才弄懂,我为了让更少人走弯路,

讲讲我的理解吧。

1.要知道原码:原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值比如:如果是8位二进制:+1原码= 0000 0001   正数的符号位是0

                -1原码= 1000 0001     负数的符号位是1

2.要知道十进制转化位二进制的方法

整数除二取余,先得到的余数从低位排起,直到商为0.小数乘二取整,也是从低位排起。

如2的原码= 0000 0010

   0.2原码=  0.001(看要求取多少位)

3.要知道为什么不能只用原码不用反码或补码呢?

为了解决原码做减法的问题, 出现了反码如计算十进制的表达式: 1 - 1 = 0

1 - 1 = 1 + (-1) = [0000 0001]原+ [1000 0001]原= [1000 0010]原= -2

显然不正确

同样为了解决1 - 1 = 1 + (-1) = [0000 0001]原+ [1000 0001]原= [0000 0001]反+ [1111 1110]反= [1111 1111]反= [1000 0000]原= -0 ,虽然人们理解上+0和-0是一样的,但是0带符号是没有任何意义的,而且会有[0000 0000]原和[1000 0000]原两个编码表示0所以出现了补码。

4.要知道它们的关系

原码---  反码  ---  补码

      //按位取反  +1

//补码--- 反码  ---  原码

     // —1    按位取反

5.要知道计算机的原理

//负数在内存中存储时,存储的是二进制的补码
int main()


int b = ~a;
printf("%d\\n", b);
return 0;


//00000000000000000000000000000000 0的二进制序列

//11111111111111111111111111111111 ~a意思是按位取反
//11111111111111111111111111111110

//10000000000000000000000000000001
//最终把它化为原码

//—1为这个代码的输出结果



有关原码,反码,补码那些事_反码

以上是关于有关原码,反码,补码那些事的主要内容,如果未能解决你的问题,请参考以下文章

原码补码反码

补码原码反码

计算机基础-原码反码补码

原码, 反码, 补码 详解

如何理解计算机组成中——真值,原码,补码,反码,移码之间的关系

原码补码反码