gpt4 book ai didi

java - Java中按位运算符和位移位的有趣行为返回值

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:30 26 4
gpt4 key购买 nike

<分区>

所以我遇到了一个关于按位运算符和位移位的奇怪行为。我试图通过使用位掩码来更快地进行小检查,但我遇到了这个:

public class Weirdness {

private final static int constant = 3;

private static int notConstant = 3;

public void stuff() {
byte a = 0b1 << 3;
byte b = 0b1 << (int) 3;
byte c = 0b1 << constant;
byte d = 0b1 << notConstant; //error
byte e = 0b1 << getAnInt(); //error
byte f = 0b1 << getAFinalInt(); //error
int i = 3;
byte g = 0b1 << i; //error
final int j = 3;
byte h = 0b1 << j;
}

public static int getAnInt() {
return 3;
}

public static final int getAFinalInt() {
return 3;
}

}

abch不给出编译错误;但是 defg 可以。编译器要求显式转换为 byte 或将最后一个变量声明为 int。我注意到 bitwize &| 也有类似的行为。

有人可以解释这里发生了什么吗?abch 工作的编译器是怎样的魔法?

编辑:或者这怎么不完全是重复的

我相信这个问题是不同的,因为来自 Why can not I add two bytes and get an int and I can add two final bytes get a byte?因为引起有趣行为的是编译器如何优化位移运算。

并且由于我寻求理论答案(因为我已经明白我可以通过转换来编译我的代码)以了解移位和其他按位运算如何确定它们的返回值,我相信这个问题可以补充 Java - bit shifting with integers and bytes并为 StackOverflow 带来更多有趣的信息。

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