成都创新互联网站制作重庆分公司

【深入浅出-JVM】(2):原码、反码、补码-创新互联

计算机中有补码表示 0

0 为正数
原码 00000000 00000000 00000000 00000000
反码 00000000 00000000 00000000 00000000 正数反码等于原码
补码 00000000 00000000 00000000 00000000 正数补码等于原码

创新互联-专业网站定制、快速模板网站建设、高性价比滦平网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式滦平网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖滦平地区。费用合理售后完善,10多年实体公司更值得信赖。

0 为负数
原码 10000000 00000000 00000000 00000000
反码 11111111 11111111 11111111 11111111 负数反码等于原码符号位不变,其余取反
补码 00000000 00000000 00000000 00000000 负数补码等于反码+1

用补码
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原
用反码
1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

数值原码反码补码
+00000 00000000 00000000 0000
-01000 00001111 11110000 0000

补码、原码、反码转换

负数原码转补码,最高位不变,其余取反,然后 +1
10000001
11111110
11111111
负数补码转原码,最高位不变,其余取反,然后+1 补码->反码->原码->反码->补码 ,(二进制数,先-1再取反和先取反后+1,结果一样)
11111111
10000000
10000001

负数反码转原码
符号位不变,其余取反
11111111
10000000

区别:

  1. 8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127].
    补码可以多表示一个范围,其实是利用补码 10000000 的原码是 = -128
  2. 原码大的问题就是 一个数加上他的相反数不等于 0
  3. 已知补码,求原码的负数的补码:符号位和数值位都取反,末位再加1

补码

【深入浅出-JVM】(2):原码、反码、补码

常用概念

  • 左移
    左移的规则只记住一点:丢弃最高位(符号位),0补最低位
  • 右移
    左边空出的位用0或者1填补。正数用0填补,负数用1填补。注:不同的环境填补方式可能不同;
    低位右移溢出则舍弃该位。
  • 无符号右移
    左边空出的位用0填补,低位右移溢出则舍弃该位。

感谢您的耐心阅读,如果您发现文章中有一些没表述清楚的,或者是不对的地方,请给我留言,您的鼓励是作者写作大的动力。

作 者 : @mousycoder

原文出处 : http://mousycoder.com/thinking-in-jvm/2/

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


名称栏目:【深入浅出-JVM】(2):原码、反码、补码-创新互联
标题路径:http://cxhlcq.com/article/pepec.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部