Разница между 2 ^ 0 * 2 и (2 ^ 0) * 2?

#java #operators #expression

#java #операторы #выражение

Вопрос:

Я ожидал, что оба выражения дадут одинаковый ответ:

 System.out.println(2^0*2);
System.out.println((2^0)*2);
  

Вывод:

 2
4
  

Есть ли конкретная причина, почему 2^0*2 = 2 и (2^0)*2 = 4 ?

Комментарии:

1. Пожалуйста, ограничьтесь только одним языком. Вопрос, который задает вопрос о двух языках, слишком широк.

2. * имеет более высокий приоритет, чем ^ . Скорее всего, то, что вы намеревались, было Math.pow(2, 0) * 2

Ответ №1:

Вы ошибочно предположили, что ^ оператор ведет себя так же, как возведение в степень в математике.

На первый взгляд вы можете видеть, что ^ понимается как оператор. На самом деле это означает побитовый XOR оператор.

 System.out.println(2^0*2);   //  2 XOR 0  * 2 = 2
System.out.println((2^0)*2); // (2 XOR 0) * 2 = 4
System.out.println(2^4);     //  2 XOR 4      = 6
  

XOR — это исключающая дизъюнкция, которая выводит значение true только тогда, когда входные данные отличаются. Вот и весь трюк:

 2^0 = 2 XOR 0 = (0010) XOR (0000) = (0010) = 2 
2^4 = 2 XOR 4 = (0010) XOR (0100) = (0110) = 6
  

Ответ №2:

проверьте эту ссылку

http://bmanolov.free.fr/javaoperators.php

2^0*2=2

  • имеет более высокий приоритет, чем ^ поэтому сначала вы вычислите 0 * 2, что равно 0, а затем замените его на 2, что приведет к результату 2

(2^0)*2

() имеет более высокий приоритет, поэтому вы сначала вычислите 2 ^ 0, а затем, что равно 2, затем умножьте его на 2

Комментарии:

1. и где я точно упомянул, что это power operator, я упомянул, что его xor

2. НЕТ проверки ссылки, в которой указаны разные значения ‘^’

Ответ №3:

Приоритет оператора

В вашем первом примере вы вычисляете: 0*2 = 2 ^ 0 = 2

Во втором примере вы вычисляете: 2 ^ 0 = 2 * 2 = 4