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
どこが間違っているかを見つけてください 解決策を見つけるのを手伝ってください