Java二进制补码示例

本文探讨了二进制如何表示负数,详细解释了原码与补码的转换规则,并通过Java实例展示了补码运算过程,特别是当整型最大值加2后如何得到-2147483647的结果。
摘要由CSDN通过智能技术生成

二进制表示负数的问题

我们知道十进制数1的二进制码用int型表示就是0000 0000 0000 0000 0000 0000 0000 0001

二进制码实际上并不能表示负数, 因为二进制数最小就是0000 0000 0000 0000 0000 0000 0000 0000 , 所以只要有数字存在就是大于0的

但实际的计算机中, 负数的运算也是必要的, 那该怎么存储呢?

于是人们根据实际的计算逻辑 1 + (-1) = 0 可以推算出, 只需要让表示负数的二进制与对应的正数的二进制相加为0就可以了.

那么, 就拿1的二进制数 0000 0000 0000 0000 0000 0000 0000 0001 作为示例, 这个二进制数加谁为 0000 0000 0000 0000 0000 0000 0000 0000 呢

如图, 二者相加就会进一位(即溢出), 而其余的位都是0, 所以, -1应该用1111 1111 1111 1111 1111 1111 1111 1111表示, 这种表示形式就是补码表示.

 

原码与补码的转换规则

计算机中存储的二进制数, 一律都是补码的形式存储的. 人们规定二进制数的最高位代表正负(0正1负), 补码就是原数值取反, 再加1 (符号位不参与取反加一)

正数的补码与原码相同 (即正数的补码就是它本身)

比如, 十进制数2, 原码形式如下

0000 0000 0000 0000 0000 0000 0000 0010

取反 (符号位不参与)

0111 1111 1111 1111 1111 1111 1111 1101

再加1 (符号位不参与)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值