Java "x + = y" и "x = x + y" дает другой результат - PullRequest
0 голосов
/ 18 мая 2018

Я придумал два выражения для присвоения значения из битовой операции переменной и заметил, что «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 сказано, что результатом недлинной целочисленной арифметики всегда является целое число.)

Поэтому мне интересно, почему он дает разные результаты.

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Оператор & имеет более низкий приоритет, чем +.

На самом деле вы написали:

n = ( n + 0 ) &1;

Я добавил скобки для пояснения.

Поскольку nчетное число, результат этого выражения равен нулю.

0 голосов
/ 18 мая 2018

в первом случае n сначала будет плюс 0, а затем и 1

n = n+0&1 -> n = (n + 0)&1 -> 0
n+=0&1 ->n+=(0&1)->n
0 голосов
/ 18 мая 2018

Разница составляет приоритет оператора . + имеет приоритет перед &, но & имеет приоритет перед +=. Таким образом, ваши операции переводятся на это:

n = (n + 0) & 1; // = n & 1 = 0 (when n is even)
n += (0 & 1);    // = n + 0 = n
...