求补码的简便方法及byte溢出问题

本文探讨了如何通过简化步骤来获取负数的补码,介绍了一种利用比该负数绝对值小1的正数的原码进行计算的方法,并讨论了计算机中补码的应用及其带来的有趣现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天兴起翻了翻Java课本看到这么一段话“要得到-8的补码,首先得到7的原码,然后将7的原码中的0变成1,1变成0,就是-8的补码”,以往求补码,都是遵循由原码得到反码,再由反码得到补码的步骤,这种方法引起了我的兴趣。

首先借助大神的博客补习一下原码反码补码的概念http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

另外要注意0的原码反码和补码,计算机辨认0需要分正0和负0,所以(8位表示,以下讨论皆为8位)原码:(+0)00000000 (-0)10000000   反码:(+0)00000000  (-0)11111111 补码:00000000,此时你可能疑惑,补码10000000表示的数是多少,不卖关子了,是-128,而-128没有原码和反码。

了解完背景现在正式分析:-1的原码为10000001,反码11111110,补码11111111。前边已经知道计算机中是用补码计算的,很容易知道-8+7=-1,即-8的补码+7的补码=-1的补码,7的补码就是7的原码,也就是-8的补码+7的原码=-1的补码,所以-8的补码+7的原码=11111111,显而易见7的原码中的0变成1,1变成0,就是-8的补码。这样一来求负数的补码可以借用比此负数绝对值小1的正数进行简便计算,即(|x|-1)的原码0变1,1变0

由于计算机采用补码计算,产生了一些有意思的问题,如byte溢出问题,解决byte溢出问题可以通过补码按部就班的分析,也可以利用循环规律,这儿附另外一个大神总结的口算方法http://m.blog.youkuaiyun.com/article/details?id=44919993


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值