gpt4 book ai didi

java - 执行数学运算后得到错误答案

转载 作者:行者123 更新时间:2023-12-01 17:20:42 25 4
gpt4 key购买 nike

我正在尝试在java中执行一些数学计算,但没有得到预期的结果。由于当我在“C”程序中运行相同的代码片段时,它可以正常工作,请指导我代码中出了什么问题。

传递给函数的值是。

v0=1970012 and v1=1970012 and iterations= 32 

“C”程序片段看起来像这样

void encipher(uint8_t iterations, uint32_t v0, uint32_t v1)
{
uint8_t i;

int key[]={0x02a4bd14,0x6c753bde,0x4ac819ad,0x6da4a0c4};




uint32_t sum, delta;

sum=0x32d61b8e;
delta=0x9E3779B9;
for (i=0; i < iterations; i++) {
v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
sum += delta;
v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
}
en_result0=v0; en_result1=v1;
}

en_result0 和 en_result1 是全局变量,与 v0 和 v1 类型相同

类似地,Java 片段代码看起来像这样。

public static void encipher(int iterations, int v0, int v1)
{
int i;
int key[]={0x02a4bd14,0x6c753bde,0x4ac819ad,0x6da4a0c4};
int sum, delta;
sum=0x32d61b8e;
delta=0x9E3779B9;
for (i=0; i < iterations; i++) {
v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
sum += delta;
v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
}
en_result0=v0; en_result1=v1;

}

这里en_result0和en_result1也是int类型的全局变量

The answer in "C" programme en_result0=3755627302 and en_result1=3278396279 

还有

The Answer in "java" Programme en_result0=-1152914223 and en_result1=1706153302

只是找不到哪里出错了,请帮我找到解决方案

最佳答案

当您用 Java 的 >>> 运算符替换 >> 运算符时,您应该得到正确的结果。它执行无符号右移,这正是 C 代码通过声明无符号变量并执行右移实现的效果。

无论签名或未签名,其他操作都是无害的并且给出相同的结果。

请注意,要打印结果,您应该执行以下操作:

println( ((long) result) & 0xFFFFFFFFL ); // where result is int

或使用适当的 printf 格式(即以十六进制打印)。

关于java - 执行数学运算后得到错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19003871/

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