计算机原码、反码和补码

原码是什么?

原码就是早期用来表示数字的一种方式: 一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码

举例说明:

      int类型的 3 的原码是 11B(B表示二进制位), 在32位机器上占四个字节,那么高位补零就得:

      00000000 00000000 00000000 00000011

      int类型的 -3 的绝对值的二进制位就是上面的 11B 展开后高位补零就得:

      10000000 00000000 00000000 00000011      

      但是原码有几个缺点,零分两种 +0 和 -0 。很奇怪是吧!还有,在进行不同符号的加法运算或者同符号的减法运算的时候,不能直接判断出结果的正负。你需要将两个值的绝对值进行比较,然后进行加减操作 ,最后符号位由绝对值大的决定。于是反码就产生了。

反码是什么 ?

正数的反码就是原码,负数的反码等于原码除符号位以外所有的位取反

   举例说明:

   int类型的 3 的反码是

   00000000 00000000 00000000 00000011

   和原码一样没什么可说的

   int类型的 -3 的反码是

   11111111 11111111 11111111 11111100

   除开符号位 所有位 取反

   解决了加减运算的问题,但还是有正负零之分,然后就到补码了

补码是什么?

   正数的补码与原码相同,负数的补码为 其原码除符号位外所有位取反(得到反码了),然后最低位加1.

   还是举例说明:

   int类型的 3 的补码是:

   00000000 00000000 00000000 00000011

   int类型的 -3 的补码是

   11111111 11111111 1111111 11111101

   就是其反码加1

最后总结一下:

    正数的反码和补码都与原码相同。

    负数的反码为对该数的原码除符号位外各位均取反。

    负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1

各自的优缺点:

    原码最好理解了,但是加减法不够方便,还有两个零

    反码稍微困难一些,解决了加减法的问题,但还是有个零

    补码理解有点困难

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值