[Java] 논리연산자 예제와 주의사항
<x는 10보다 크고 20보다는 작은가?>
수학에서
x > 10 : x는 10보다 크다
x < 20 : x는 20보다 작다
라는 두개의 조건이 있을 때
두 조건을 모두 만족하는
'x는 10보다 크고 20보다 작다'를
10 < x < 20 으로 표현할 수 있다.
하지만 Java에서는 허용되지 않는 표현이다.
x > 10 : x는 10보다 큰가?
x < 20 : x는 20보다 작은가?
를 '그리고(AND)'로 연결하여
'x는 10보다는 크고 20보다는 작은가?'를 쓰려면
(='x는 10보다 크면서 20보다 작은가?')
x > 10 && x < 20
라고 써야 한다.
x >10의 연산 결과와
x <20의 연산 결과가 true라고 가정했을 때
논리 연산자 &&의 피연산자는 모두 true가 되고
true && true 의 결과값으로 true가 연산된다.
10 < x && x < 20
이라고 써도 된다.
<i는 2의 배수 또는 3의 배수인가?>
어떤 수가 2의 배수라는 얘기는
2로 나누었을 때 나머지가 0이기 때문에
'i는 2의 배수인가?'라는 표현은
나머지 변수와 비교 연산자를 이용하여
다음과 같이 쓸 수 있다.
i%2 == 0
짝수는 전부 2의 배수이므로
'i은 짝수인가?'라는 표현도 위와 같다.
그렇다면 'i는 홀수인가?'라는 표현은
2로 나누었을 때 나머지가 1이므로
다음과 같이 쓸 수 있다.
i%2 == 1
'i가 2의 배수 또는 3의 배수인가?'라는 표현은
(='i가 2의 배수이거나 3의 배수인가?')
다음과 같다.
i%2 == 0 || i%3 == 0
예를 들어 i의 값이 8이라면
i%2 == 0은 true이고
i%3 == 0은 false가 된다.
true || false의 논리 연산 결과는
true가 된다.
<i는 2의 배수 또는 3의 배수이고, 6의 배수는 아닌가?>
만약 'i는 2의 배수 또는 3의 배수이고, 6의 배수는 아닌가?'
라는 세개의 조건이 필요한 표현을 쓰려고 한다면,
(i%2 == 0 || i%3 == 0) && i%6 != 0
으로 표현해야 한다.
여기서 주의해야할 점은 &&가 ||가
우선순위가 높기 때문에
||를 사용한 식을 먼저 연산해야 하는 경우
반드시 괄호()를 이용해서 표현해야 한다.
아래와 같이 결과값이 달라진다.
int i = 6;
boolean a = (i%2 == 0 || i%3 == 0) && i%6 != 0;
boolean b = i%2 == 0 || i%3 == 0 && i%6 != 0;
System.out.println(a); // false
System.out.println(b); // true