Java 长型整数计算

Java 长型整数计算,java,long-integer,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*

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

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


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

这是因为当你除以0xeaaeb43e477b8487L/0x6869时,你失去了余数,这会导致精度下降

0xeaaeb43e477b8487L % 0x6869= -9238
如果我们考虑到这一点,我们将得到

0xEAAEB43E477BA89DL -9238 =  0xeaaeb43e477b8487
这很有效

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

这是什么编程语言?这是Java语言。但我认为当我使用64位整数时,每种语言都有相同的问题。不管怎样,你为什么期望
0xeaaeb43e477b8487L
?这三个神奇的十六进制数组合在一起的意义是什么?