gpt4 book ai didi

Java左移澄清

转载 作者:行者123 更新时间:2023-12-01 18:00:46 25 4
gpt4 key购买 nike

我无法找出此行为的原因。我想将字节值 OxAB 左移 8 位。然后我想将其转换为 long。

byte oneByte = (byte) 0xAB;
long converted = (oneByte & 0xFF) << 8;
System.out.println(converted);

在本例中,输出为 43776。但是,如果我将代码更改为:

byte oneByte = (byte) 0xAB;
long converted = (oneByte) << 8;
System.out.println(converted);

输出更改为 -21760。我有以下问题:

  1. 0xFF 的数据类型是什么?
  2. 为什么按位与 0xFF 会阻止符号扩展?

最佳答案

long converted = onebyte; // gives you -85

如果你将它向左移动 8 次,它会精确地给出 -21760因为在转换为 long 期间,最左边的位用作符号位。

long converted = onebyte & 0xFF; //gives you 171

如果你将它向左移动 8 次,就会得到 43776

因为使用bitwise和byte时,short和char会先转换为int,然后再执行按位运算。

11111111111111111111111110101011 //byte 0xAB casted to int
00000000000000000000000011111111 //0xFF is an int literal
00000000000000000000000010101011 //bitwise and operation

按位和 0xFF 后,符号位被删除

关于Java左移澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60635098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com