Вы можете хранить х как BigInteger
и вызвать shiftLeft
на него, а затем сделать вашу операцию XOR.
Зачем нужны 61 бит для представления 1452610545672622396, а смещение влево 21 переполняет длинный (64 бит).
-
Вы не можете преобразовать результат обратно в длинный, потому что нужно 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, что 'x'? – user1803551
Извините, это длинный – cogmission