2011-08-17 2 views
5

При задании двух булевых аргументов оператор^выполняет исключительные действия или, например,groovy^operator

true^true == false 
true^false == true 
false^true == true 
false^false == false 

При предоставлении двух числовых аргументов он что-то делает, но я понятия не имею, что. Сначала я подумал, что это модульное разделение, потому что

(5^5) == 0 

Однако

(10^4) == 14 

Так что это не модульное разделение, это своего рода битного перекладывания?

+0

Это побитовое исключающей или, так же, как Java http://stackoverflow.com/questions/460542/operator-in-java –

ответ

12

^ делает то же самое, как это делается в Java и других языках:

Это побитовое исключающее ИЛИ (коротко: побитовое исключающее ИЛИ)

Это означает, что для каждого бита в двоичном представлении два числа, в результате получившийся бит на выходе будет bit_in_first_value^bit_in_second_value.

+1

Действительно, мне известно, все сильно охват языков, полученные из C имеет это предписанное поведение их Операторы XOR. НАПРИМЕР. 'perl -le 'print (10^4)' 'распечатывает 14. Groovy и Perl занимают схожую экологию, так что [версия Groovy] (http://pleac.sourceforge.net/pleac_groovy/index.html) был первым из десятков языков, чей перевод * Perl Cookbook * был завершен в [PLEAC - Справочник по языкам программирования языка Jiki Cookie] (http://pleac.sourceforge.net/) в Sourceforge. OCaml был вторым. Python составляет 85%, а Ruby - всего 65%. Groovy - это легко и весело. – tchrist