Gdy spróbujesz zrobić coś takiego:Dlaczego działa funkcja (boolean^int> 0)?
if (true^1) {
//do something
}
kompilator rozsądnie mówi, że operator ^
nie jest zdefiniowane dla typów argumentów boolean i int. Ale jeśli używasz go tak:
if (true^1 > 0) {
//do something
}
się kompiluje kod (Java 8 co najmniej) i bezawaryjnie działa. Zasadniczo te operacje:
false^-1 > 0
false^1 > 0
true^-1 > 0
true^1 > 0
działać jak ważny logicznej XOR:
|^
-----+--
F F | F
F T | T
T F | T
T T | F
Czy ktoś proszę wyjaśnić, co dzieje się pod maską?
Zalecam zapoznanie się z [* priorytetem operatora *] (http://introcs.cs.princeton.edu/java/11precedence/). –
@Someprogrammerdude Aby być uczciwym, fakt, że operatory bitowe mają niższy priorytet niż porównania, jest szczególnie niezrozumiałym aspektem priorytetu operatorów w przypadku języków. – Random832
Dlatego musisz się o tym dowiedzieć, @random :-) –