gpt4 book ai didi

java - 计算进位标志

转载 作者:行者123 更新时间:2023-11-30 03:21:44 27 4
gpt4 key购买 nike

我正在用 Java 编写一个 x86 解释器,并且有一个 Python 脚本可以使用 NASM 来测试我的 x86 指令的实现与实际对应的指令的实现。根据此测试,除了进位标志之外,所有标志都设置正确。有趣的部分是:

long result;
switch (op) {
case ADD:
result = Math.abs(x) + Math.abs(y);
if (result > U_MAX)
registers.carry_flag = true;
else
registers.carry_flag = false;
break;

其中 U_MAX 为 4294967295L(全部 32 位设置)。
我发现的所有答案都没有意识到进位和溢出是两个不同的东西。那么,如何在Java中正确实现进位标志呢?

最佳答案

所有这些绝对值业务都是不必要的,而且坦率地说令人困惑,并且它具有 Math.abs(Integer.MIN_VALUE) 的边缘情况。是负数(当你认真思考它时,这并不奇怪,但它看起来不像这段代码所期望的),你可以用更简单的方法计算进位。

例如,使用旧的“结果是无符号的小于一个操作数”。结果当然只是x + y (如 int ),符号与加法无关。然后使用Java 8,您可以使用 Integer.compareUnsigned ,否则您可以使用此身份:

x <u y = (x ^ Integer.MIN_VALUE) <s (y ^ Integer.MIN_VALUE)

哪里<u<s分别是无符号小于和有符号小于。

您还可以计算(x & 0xffffffffL) + (y & 0xffffffffL)并将其用于结果(转换为 int )和进位标志(第 33 位)。

关于java - 计算进位标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31170203/

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