原码、反码和补码

定义:正数的原码反码补码都一样,负数的反码除符号位都要取反,补码让它的反码加1。

1、原码就是转换的二进制数字,因为人可以知道左边首位是符号位,所以可以直观的用来计算

1+(-1)= 0;

2、计算机的计算为了尽可能的简便,加入了反码的概念,但是会有一个问题,出现-0和0

0000 0001((原码)) + 1000 0001 (原码)= 0000 0001(反码)+1111 1110(反码)= 1111 1111(反码)= 1000 0000(原码)= -0

3、计算机为了解决(2、)出现的-0和0的问题,出现了补码

0000 0001(反码)+1111 1110(反码)= 0000 0001(补码)+1111 1111(补码)= 1000 0000 (反码)= 0000 0000(原码)= 0

补充:-1-127的结果应该是-128, 在用补码运算的结果中, [1000 0000] 就是-128. 但是注意因为实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示.(对-128的补码表示[1000 0000]补算出来的原码是[0000 0000], 这是不正确的)使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数. 这就是为什么8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127].因为机器使用补码, 所以对于编程中常用到的32位int类型, 可以表示范围是: [-231, 231-1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.

以上转自:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

posted @ 2017-02-17 17:27  爱笑的3  阅读(454)  评论(0编辑  收藏  举报