Я придумал два выражения для присвоения значения из битовой операции переменной и заметил, что «x + = y» и «x = x + y» дали в этом случае разные результаты:
public void random ()
{
int n = 43261596;
System.out.println(Integer.toBinaryString(n));
n = n + 0&1; //binary representation of n is 0
//n += 0&1; //result is the same as n
System.out.println(Integer.toBinaryString(n));
}
Я провел некоторое исследование и обнаружил, что единственный случай "x + = y" и "x = x + y" не эквивалентен, когда оперантные типы не совпадают, однако в этом случае "n" является типом int
и "0 & 1" должно быть типом int
(в соответствии с этим вопросом Почему битовое И двух коротких значений приводит к значению int в Java? :
Потому что в спецификации языка Java сказано, что результатом недлинной целочисленной арифметики всегда является целое число.)
Поэтому мне интересно, почему он дает разные результаты.