长类型整数计算

时间:2013-04-18 03:26:36

标签: java long-integer

我现在正在制作一个计算长整数的源代码,但我不知道为什么这个计算会给我错误的答案。

long l;
//variable l is where you input long, signed int

l *= 0x6869L;
if(l == 0xeaaeb43e477b8487L)
    System.out.println("Correct!");

我做了0xeaaeb43e477b8487 / 0x6869 = 0xFFFFCBBB6D375815 但是当我计算0xFFFFCBBB6D375815 * 0x6869时会给出0xEAAEB43E477BA89D。

为什么会发生这件事?这个数学问题的真正答案是什么?

1 个答案:

答案 0 :(得分:3)

这是因为当你划分0xeaaeb43e477b8487L / 0x6869时会丢失余数,这会导致精度损失。

0xeaaeb43e477b8487L % 0x6869= -9238

如果我们考虑到这一点,我们会得到

0xEAAEB43E477BA89DL -9238 =  0xeaaeb43e477b8487

这是有效的

if ((l - 9238) == 0xeaaeb43e477b8487L)
    System.out.println("Correct!");