. Java의 정석

[Java] 논리연산자 예제와 주의사항

박인영 2021. 7. 9. 20:02

 

 

 

<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