原码补码反码

恶补一下原码反码补码,忘记的童鞋也可以看看

未经本人同意不得用于获取积分等。

转载请注明,http://blog.csdn.net/tryhl/article/details/42098871,谢谢!!!!

欢迎加入 java学习分享群:316297243,一起学习

1.回顾计算机表示数字

  原码、反码、补码的诞生都是为了表示数据,只不过是三种不同的编码方式而已。

十进制15-15大家都知道代表什么,如果直接把这个呈现给计算机,计算机肯定是醉了,不知道这是什么。因为计算机只认识0,1这两个数字。

数字在计算机中是用机器数表示的(一个数在计算机中的二进制表示形式,叫做这个数的机器数),在计算机用一个数的最高位存放符号,正数为0,负号为1

 例如:+3机器数表示为 00000011-3表示为10000011

 +3的第一位0是表示正数,0000011表示值3,所以为+3

 -3的第一位是1表示负数,0000011表示值3,所以为-3.

2.原码 反码 补码的定义

  原码:符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。其实上面的表示一样。

例如:[+1]原码=[0000 0001]   [-1]原码=[1000 0001]

因为第一位是符号位,所以8位的二进制数范围为

-2+ 12- 1   即 -127127

原码我们人最容易识别和判断,计算机也能够识别。

按理说反码和补码就不应该在出现在这个世界上,但是它们既然出现了,肯定有它们的道理。


  反码:整数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。

其范围也是-2+ 12- 1   即 -127127

例如:[+1]原码=[0000 0001]    [+1]原码=[0000 0001]

[-1]原码=[1000 0001]    [-1]反码=[1111 1110]

  如果一个表示负数的反码人脑是无法直接判断出来负数的值。

  为什么会有反码呢?因为在计算机中进行加减的需求,大家都知道让计算机去识别减法会相当的复杂,但是如果识别加法会比较容易。但是减法是可以用加法来表示的。

例如:

利用原码进行加减:

1-1=1+-1=[0000 0001]原码 +[1000 0001]原码=[1000 0010]原码=-2显然不对。

利用反码进行加减:

1-1=1+-1=[0000 0001]反码 +[1111 1110]反码=[1111 1111]反码=-0

计算的结果是正确的,因为按照我们的理解-0就是0,带符号的0是没有任何意义的。所以[0000 0000]反码、 [1111 1111]反码都表示0,可想而知一个数字可以有两种表达形式,显然是不行的。所以引入了补码。


  补码:正数的补码是其本身,负数的补码是在其原码基础上,符号位不变,其余各位取反,最后加1(也就是在反码的基础上加1)

因为当时负数时加1,所以

1-1=1+-1=[0000 0001]补码 +[1111 1111]补码=[0000 0000]补码=0

2-1=2+-1=[0000 0010]补码 +[1111 1111]补码=[0000 0001]补码=1

这样0[0000 0000]表示而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:

(-1) + (-127) = [1000 0001] + [1111 1111] = [1111 1111] + [1000 0001] = [1000 0000]

-1-127的结果应该是-128, 在用补码运算的结果中, [1000 0000] 就是-128. 但是注意因为实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示.(-128的补码表示[1000 0000]补算出来的原码是[0000 0000]这是不正确的)

使用补码不仅仅修复了0的符号以及存在两个编码的问题而且还能够多表示一个最低数这就是为什么8位二进制使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127].


参考文章:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

  • 16
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值