具体来说,我想使用这个数字:x = 1452610545672622396并执行x ^ =(x 并得到:12043412836254060860 // //我在Python中得到的而不是:-6403331237455490756 //这是我在Java中获得的(并且不需要) 最佳答案 您可以将x存储为BigInteger并在其上调用shiftLeft,然后执行xor操作。原因:您需要61位来表示1452610545672622396,将其左移21位会溢出一个长整数(64位)。-您无法将结果转换回long,因为它需要64位,并且只能使用这些+符号中的63位。(log2 12043412836254060860 = 63.3848780807)这是示例代码:public static void main(String[] args) { long x = 1452610545672622396L; BigInteger bigX = BigInteger.valueOf(x); bigX = bigX.shiftLeft(21).xor(bigX).and(new BigInteger("ffffffffffffffff", 16)); System.out.println(bigX); // 12043412836254060860 System.out.println(bigX.longValue()); // -6403331237455490756}关于java - 在Java中获得与Python相同的左移值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38861186/ 10-13 03:28