java bit操作_Java位操作

小编典典

谁想到在发明Java时应该对字节进行签名的人应该拿出并用湿的芹菜棒打打直到他们哭泣:-)

您可以通过强制转换为int并确保永远不要将1移入最高位来完成所需的操作,如下所示:

byte x = -1;

int x2 = ((int)x) & 0xff;

for(int i = 0; i < 8; i++)

{

x2 = (x2 >>> 1);

System.out.println("X: " + x2);

}

您的特定问题是因为>>>强制转换为一个int以进行移位,然后将其强制转换为一个字节,如下所示:

byte x = -1;

int x2 = ((int)x) & 0xff;

int x3;

int x4 = x2;

for(int i = 0; i < 8; i++)

{

x2 = (x2 >>> 1);

System.out.println("X2: " + x2);

x3 = (x >>> 1);

x = (byte)x3;

x4 = (x4 >>> 1);

System.out.println("X: " + x3 + " " + x + " " + x4);

}

哪个输出:

X2: 127

X: 2147483647 -1 127

X2: 63

X: 2147483647 -1 63

X2: 31

X: 2147483647 -1 31

X2: 15

X: 2147483647 -1 15

X2: 7

X: 2147483647 -1 7

X2: 3

X: 2147483647 -1 3

X2: 1

X: 2147483647 -1 1

X2: 0

X: 2147483647 -1 0

您可以清楚地看到x和x3不起作用(即使x3正确移位,将其强制转换回x中的字节也会再次将其设置为-1)。x4完美运行。

2020-09-26

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值