对原码,反码,补码的理解

今日在对java的学习中,遇到进制转换的问题,发现有符号的数即负数的进制转换涉及到原码,反码,补码相关知识。所以经过查阅资料,琢磨,下面是我自己对原码,反码,补码的理解。

计算机就是通过处理数据,才实现出这么多功能。在日常使用中,无论是点击按钮,打开图片,播放视频,亦或是其他操作,本质上都是对数据进行处理,因为,这些图片,视频等其储存在计算机中就是由0和1组成的二进制数据形式,只不过含有其特殊的编码,归本溯源都是二进制格式。现在就简单的以数字为例。

人在日常生活中是使用十进制数的,在计算机中,将会把十进制转换成二进制数。是以补码的形式存储在计算机中。但在补码之前,还有原码,和反码。

原码:

  是在最早期,以二进制表现数字的一种形式。

  正数:十进制转换成二进制【十进制数除以2,一直到商为0,取其余数,就为二进制数】

  负数:在计算机中,最小的存储单位是字节,一个字节是八位,所以规定最高位为正负的符号位,如果是正数,符号位为0,负数的符号位为1。所以,原码中负数的二进制数就是将此负数的绝对值的原码的最高位变为1

420010 1010
-421010 1010
70000 0111
-71000 0111

 

  但是这样的负数原码在计算时却出现问题,42+(-7)应该为35,使用此二进制数相加减,得到的结果为1011 0001,十进制是177.此时计算机中的计算是把-7的二进制数1000 0111当成正数135来进行计算的。所以原码中的负数并不符合要求,所以诞生了反码。

  反码:

  反码规定,最高位仍旧是符号位,正数的原码和反码相同,负数的反码是在此负数的原码基础上,除符号位,将其余各位取反。

 

420010 1010
-421101 0101
70000 0111
-71111 1000


  反码也没有解决其计算问题,即42+(-7)=35,在二进制计算里,得到结果为0010 0010为34。42+(-42)=0的二进制也出现了问题,得到的结果不是0。所以出现了补码。

  补码:

  正数的补码和原码,反码一致。负数的补码就是在反码的基础上加1。

420010 1010
-421101 0110
70000 0111
-71111 1001

 

  经过计算。42+(-7)=35,二进制计算结果为0010 0010 + 1 =0010 0011,十进制也为35。42+(-42)=0,二进制计算结果为0000 0000,十进制为0。这样补码就完美解决了正负数遇到的各种问题,所以计算机中存储数据都是以补码形式。

 

转载于:https://www.cnblogs.com/wzl521cc/p/9757736.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值