티스토리 뷰

반응형

논리 연산자는 자주 사용하는 연산자인 것에 비해 헷갈리는 부분이 많다.

[x가 5보다 크다] 라는 조건을 연산자를 써서 표현한다면 [x > 5] 로 표현한다. 하지만 코드를 작성하다보면 이렇게 단순한 식이 아닌 복잡한 연산자를 수행해야 한다.

 

논리연산자에는 기본적으로 && / || / ! 가 있다.

&& 그리고 (AND)
|| 또는 (OR)
! 부정

 

한가지 조건이 아닌 두가지 혹은 세가지 조건이 붙는 경우가 많다.

x는 1보다 크고, 10보다 작다. 라는 말은 쉽게 말해 x 는 1보다 크다. 그리고 10보다는 작다. 라는 말이다.

이 조건을 위에 대입하여 다음과 같이 쓸 수 있다.

x > 1 && x < 10

y는 2의 배수 또는 3의 배수이다. 

이 조건을 위에 대입하여 다음과 같이 쓸 수 있다.

y%2 == 0 || y%3 == 0

 

이제 두가지 조건이 함께 사용되는 경우를 보자.

 

z는 2의 배수 또는 3의 배수지만 3은 아니다. 

이 조건을 위에 대입하면 다음과 같이 쓸 수 있다.

( z%2 == 0 || z%3 == 0 ) && z != 3

위 식을 보면 괄호를 사용해야 하는 부분은 && 연산자가 || 연산자보다 우선순위가 높기 때문에 괄호가 없다면

z%2 == 0 || ( z%3 == 0 && z != 3 )

이런식의 연산되기 때문에 전혀 다른 결과가 나온다.

때문에 두가지 조건 이상을 연산하기 위해서는 괄호를 통해 명확하게 해주는 것이 좋다.

 

위의 형식을 테스트 해보면 다음과 같다.

 

예제

public class test2 {
	public static void main(String[] args) {
		int x = 0;
		int y = 0;
		int z = 0;
		
		int x = 0;
		int y = 0;
		int z = 0;
		
		x = 7;
		System.out.printf("x=%2d, x > 1 && x < 10 = %b%n", x, x > 1 && x < 10);
		// x= 7, x > 1 && x < 10 = true
		
		x = 11;
		System.out.printf("x=%2d, x > 1 && x < 10 = %b%n", x, x > 1 && x < 10);
		// x=11, x > 1 && x < 10 = false

		y = 3;
		System.out.printf("y=%2d, y%%2 == 0 || y%%3 == 0 = %b%n", y, y%2 == 0 || y%3 == 0);
		// y= 3, y%2 == 0 || y%3 == 0 = true
		
		y = 4;
		System.out.printf("y=%2d, y%%2 == 0 || y%%3 == 0 = %b%n", y, y%2 == 0 || y%3 == 0);
		// y= 4, y%2 == 0 || y%3 == 0 = true
		
		y = 5;
		System.out.printf("y=%2d, y%%2 == 0 || y%%3 == 0 = %b%n", y, y%2 == 0 || y%3 == 0);
		// y= 5, y%2 == 0 || y%3 == 0 = false
		
		z = 3;
		System.out.printf("z=%2d, ( z%%2 == 0 || z%%3 == 0 ) && z != 3 = %b%n", z, ( z%2 == 0 || z%3 == 0 ) && z != 3);
		// z= 3, ( z%2 == 0 || z%3 == 0 ) && z != 3 = false
		
		z = 4;
		System.out.printf("z=%2d, ( z%%2 == 0 || z%%3 == 0 ) && z != 3 = %b%n", z, ( z%2 == 0 || z%3 == 0 ) && z != 3);
		// z= 4, ( z%2 == 0 || z%3 == 0 ) && z != 3 = true
		
		z = 5;
		System.out.printf("z=%2d, ( z%%2 == 0 || z%%3 == 0 ) && z != 3 = %b%n", z, ( z%2 == 0 || z%3 == 0 ) && z != 3);
		// z= 5, ( z%2 == 0 || z%3 == 0 ) && z != 3 = false
	}
}

 

실행결과

x= 7, x > 1 && x < 10 = true
x=11, x > 1 && x < 10 = false
y= 3, y%2 == 0 || y%3 == 0 = true
y= 4, y%2 == 0 || y%3 == 0 = true
y= 5, y%2 == 0 || y%3 == 0 = false
z= 3, ( z%2 == 0 || z%3 == 0 ) && z != 3 = false
z= 4, ( z%2 == 0 || z%3 == 0 ) && z != 3 = true
z= 5, ( z%2 == 0 || z%3 == 0 ) && z != 3 = false
반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31