У меня есть следующее значение:
int x = -51232;
Целые числа Java являются 32-битными, поэтому в двоичном виде это должно быть следующим:
10000000000000001100100000100000
Бит знака слева установлен на 1
, поскольку x
отрицательно.
Затем я делаю операцию
x = (x & Integer.MAX_VALUE);
Integer.MAX_VALUE
равно 2147483647
, а в двоичном виде это будет:
01111111111111111111111111111111
0 слева, потому что значение положительное.
Так почему x & Integer.MAX_VALUE
дает 2147432416
? Оператор AND
должен извлекать только те биты, которые x
и Integer.MAX_VALUE
имеют общее, что должно быть эквивалентно -x
(поскольку они не используют один и тот же бит знака).
Что здесь происходит?