2014-11-18 3 views
4

У меня есть некоторые вопросы о операторе XOR ^ в Java.Java XOR Вопросы оператора

Я всегда думал, что Java не имеет логического оператора XOR, потому что несколько человек сказали мне ^ побитовое. Сегодня я нашел некоторые (неподтвержденные) сообщения (без источников), говорящие, что ^ перегружен в Java, работает как логический XOR для булевых и как побитовый XOR, например. для целых чисел.

Какое утверждение верно? Может ли кто-нибудь предоставить некоторые надежные источники?

Если ^ перегружен, какие типы он принимает?

ответ

7

Java Language Specification определяет

Когда оба операнда оператора &, ^ или | относится к типу, который конвертируемых (§5.1.8) до примитивного интегрального типа, двоичное числовая промотирования сначала выполняются над операндами (§5.6.2).

Тип выражения побитового оператора - это продвинутый тип операндов.

  • Для ^ значение результата - побитовое исключающее ИЛИ значений операнда.

и

Когда оба операнда в &, ^ или | оператора имеют тип boolean или Boolean, то тип выражения оператора побитового является boolean. Во всех случаях операнды подлежат распаковке преобразования (§5.1.8) при необходимости.

  • Для значения ^, значение результата равно true, если значения операнда различны; в противном случае, результат false.

В Java нет концепции перегружающих операторов.

+3

Я думаю, что это нормально, чтобы вызвать оператора «перегруженным» как общую концепцию. Но, конечно, вы не можете перегружать операторов сами, как вы можете на C++ или на некоторых других языках. – ajb

+2

@ajb IMO Если это не язык терминологии. Я бы избегал его использования, когда говорил о языке.В Java есть два '^' оператора, один побитовый и один логический. –

0

Вы должны думать о^как побитовом XOR.

Вы должны думать о booleans как о единичных битах с false = 0 и true = 1.

Это второе предложение имеет столько же общего с вашим вопросом, сколько с мышлением, как программистом!

Смежные вопросы