#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