java and运算_java – 带有符号字节的按位AND运算

这是代码:

int i = 200;

byte b = (byte) 200;

System.out.println(b);

System.out.println((short) (b));

System.out.println((b & 0xff));

System.out.println((short) (b & 0xff));

这是输出:

-56

-56

200

200

按位AND与0xff不应该改变b中的任何内容,但显然它确实有效,为什么?

解决方法:

它有效,因为200超出了最大可能(带符号)字节127.由于此溢出,该值已经分配了-56.设置了最重要的字节,值为-128.

11001000

因此,前两个输出语句显示-56,并且转换为short将执行符号扩展以保留负值.

当你表演& 0xff,发生了两件事.首先,将值提升为带符号扩展名的int.

11111111 11111111 11111111 11001000

然后,执行bit-and,仅保留最后8位.这里,第8位不再是-128,而是128,因此恢复了200.

00000000 00000000 00000000 11001000

无论价值是否变为短期,都会发生这种情况;短路有16位,可以很容易地代表200位.

00000000 11001000

标签:java,bit-manipulation

来源: https://codeday.me/bug/20190722/1504866.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值