java 负数存储结构_Java中正负数的存储方式-正码 反码和补码

Java中正负数的存储方式-正码 反码和补码

正码

我们以int 为例,一个int占用4个byte,32bits

0 存在内存上为 00000000 00000000 00000000 00000000

11 存在内存上为 00000000 00000000 00000000 00001011

反码

逐位取反,就得到一个对应的反码

以11为例

正码: 00000000 00000000 00000000 00001011

反码: 11111111 11111111 11111111 11110100

补码

在补码的基础上再加1,就可以得到补码。

同样以11为例

正码: 00000000 00000000 00000000 00001011

反码: 11111111 11111111 11111111 11110100

补码: 11111111 11111111 11111111 11110101

此时候就可得到-11在内存上的表示方式(11111111 11111111 11111111 11110101)

如果要知道某个二进制的负数实际上是多少(最高位为1)

以0xFFFFFFFF为例子

补码: 11111111 11111111 11111111 11111111

反码: 11111111 11111111 11111111 11111110

正码: 00000000 00000000 00000000 00000001

正码为1,所以0xFFFFFFFF (11111111 11111111 11111111 11111111)表示-1.

这么做的原因

这是因为底层硬件对数据做运算的时候,只有加数器可用,也就是只能直接把数据拿来相加,通过将负数用这种方式来表达,就可以直接通过对二进制码相加实现对数据的加减运算。

以 -11+5 为例子

-11: 11111111 11111111 11111111 11110101

+5 : 00000000 00000000 00000000 00000101

-6 : 11111111 11111111 11111111 11111010

反码: 11111111 11111111 11111111 11111001

正码: 00000000 00000000 00000000 00000110

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值