Java中高位转低位溢出的计算过程

本文探讨了Java中高位转低位溢出的计算原理,通过具体例子展示了(byte)129、(byte)-129和~10的计算过程。详细解释了正数和负数在原码、反码、补码之间的转换,强调了计算机以补码进行计算,并给出了计算结果。

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

System.out.println((byte) 129);
System.out.println((byte) -129);
System.out.println("~b2: " + ~10);

结果是:

-127
127
~b2: -11

计算机中是以补码进行计算

正数的反码补码都是原码,如:
10
原码: 1010
反码: 1010
补码:1010

负数 -10
原码 10000000 00000000 00000000 00001010
反码(符号位不变,其余位取反) 01111111 11111111 11111111 11110101
补码(反码+1): 01111111 11111111 11111111 11110110

(byte) 129

对于129,二进制为
00000000 00000000 00000000 10000001
其补码:00000000 00000000 00000000 10000001
由于byte只占1字节即8位,所以,上面截取8位置后如下:10000001
此时最高位为1即负数,该二进制减1即是反码
反码:10000000
原码:11111111
即-127,所以(byte)129的结果就是-127

(byte) -129

-129 二进制为
10000000 00000000 00000000 10000001
对应的补码为(反码+1)
11111111 11111111 11111111 01111111
截取8为后为:01111111
为正数,其原码反码补码均为01111111即127
所以(byte)-129的结果就是127

~10

10的二进制为
00000000 00000000 00000000 00001010
补码是本身,取反之后为
11111111 11111111 11111111 11110101
此时最高位为1,负数,即是负数的补码
该反码(补码-1)
11111111 11111111 11111111 11110100
对应的原码:
10000000 00000000 00000000 00001011 即-11
所以~b2的结果是-11

总结

  • 计算机中是以补码进行计算,原码进行显示
  • 正数的反码补码都是其本身
  • 负数的反码是原码符号位不变其他取反,补码是反码+1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值