gpt4 book ai didi

java - 字节神奇地变化

转载 作者:行者123 更新时间:2023-12-01 10:34:41 25 4
gpt4 key购买 nike

我得到了一个枚举,其中每个枚举常量都有一个字节和一个接口(interface)对象(通过 lambda)

//...
public enum InstructionSet {
//...
INSTRUCTION_HALT((byte) 0xF0, (ticksSinceStart) -> {
return halt(ticksSinceStart);
});


private final byte opCode;
private MicroOperationPlan plan;

private InstructionSet(byte opCode, MicroOperationPlan opPlan) {
this.opCode = opCode;
this.plan = opPlan;
}

//...

public byte getOpByte() {
return this.opCode;
}
}

现在我在主方法中得到了调试输出。在我的 main 方法之前没有执行更多代码。字节“opCode”在我的枚举中是最终的,因此无法更改。调试指令:

public static void main(String[] args) {
System.out.println(Integer.toHexString(InstructionSet.INSTRUCTION_HALT.getOpByte()));

//...
}

我认为应该打印到终端:f0

终端打印的内容:ffffffff0

当我不将其转换为十六进制字符串时,它仍然在终端中打印 -16,相当于 fffffff0 的十进制数是多少。

发生了什么?

最佳答案

使用默认的符号继承方法将一个字节 1111 0000 扩展为四个字节:1111 1111 1111 1111 1111 1111 1111 0000,然后转换为十六进制字符串。

正如 JB Nizet 指出的那样,字节在 Java 中是有符号的,因此 byte 的值不能高于 127;如果高位被设置,则它们为负。

因此,您必须撤消默认的符号继承行为,例如

System.out.println(Integer.toHexString(InstructionSet.INSTRUCTION_HALT.getOpByte() & 0xFF))

关于java - 字节神奇地变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34839183/

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