티스토리 뷰

IT/Java

논리 연산자

오예봉봉 2020. 4. 18. 15:34



논리 연산자란 논리곱(&&) , 논리합(||) , 배타적 논리합(^), 논리 부정(!) 의 기능을 수행하는 연산자를 의미합니다. 논리 연산자의 피 연산자는 boolean 타입만이 가능합니다. 논리 연산자의 종류와 기능을 봅시다.

논리곱(AND)

피 연산자가 전부 참(true)일 경우에만 연산 결과가 참이 산출 됩니다. 그 이외의 경우는 모두 거짓(false)입니다.
기호는 & 또는 &&를 사용합니다.


 연산식

 연산 결과

 true  (& 또는 &&)   true

 true

 true  (& 또는 &&)   false

 false

 false (& 또는 &&)   true

 false

 false (& 또는 &&)   false

 false


논리합(OR)

이 연산자는 | 또는 || 기호를 사용 합니다. ( | 기호는 키보드의 \키 위에 있는 기호)
피 연산자가 하나라도 true(참)가 있으면 연산 결과는 true가 나옵니다. 즉 피 연산자가 둘 다 false(거짓)일 경우에만 거짓이 나옵니다.

연산식 

 연산 결과

 true  ( | 또는 ||)   true

 true

 true  ( | 또는 ||)   false

 true

 false  ( | 또는 ||)  true

 true

 false  ( | 또는 ||)  false

 false


배타적 논리합(XOR)

기호는 ^( 숫자 6위의 기호)를 사용합니다. 
이 연산자는 피 연산자가 서로 다른 boolean값을 갖는 경우에만 true(참)의 연산 결과가 산출 됩니다.

연산식 

 연산 결과

 true   ^  true

 false

 true   ^  false

 true

 false  ^  true

 true

 false  ^  false

 false



논리 부정(NOT)

이 연산자의 기호는 ! 입니다.
피 연산자의 boolean 값을 반대로 바꾸어 주는 기능을 합니다.
위 의 논리 연산자들이 피 연산자가 2개 필요한 이항 연산자임에 비하여 논리 부정 연산자는 피 연산자가 1개인 단항 연산자입니다.
true 값은 false로 false 값은 true 로 변환 시켜 줍니다.

&& 연산자 와 & 연산자

이 둘은 결과 값은 같지만 그 산출 과정이 다릅니다. & 연산자는 피 연산자 두 개를 모두 보고 결과 값을 냅니다. 그러나 &&연산자는 좌측 피 연산자가 false이면 더 이상 우측 피 연산자를 보지 않고 바로 false값을 산출 합니다. 피 연산자 중 1개라도 false면 어차피 결과가 false이기 때문입니다.
그래서 &보다는 &&가 속도 면에서 더 효율적이라고 할 수 있습니다.

|| 연산자 와 | 연산자

이 두 연산자도 위의 && 와 & 같이 동일한 차이점이 있습니다. 즉,  || 연산자 좌측 피 연산자가 true(참)이면 우측 피 연산자를 더 이상 보지 않고 결과 값 true를 산출합니다.

한 개의 피 연산자라도 true 면 어차피 전체 연산식의 결과는 true 이기 때문입니다. 이에 비하여 |연산자는 두 피 연산자의 값을 모두 따져 봅니다. 속도 측면에서 당연히 ||연산이 더 우수합니다.


 제어문의 조건식에 주로 사용

논리 연산자는 주로 조건문(if) , 반복문(for, while , do~while) 등 실행 흐름을 제어하는 제어문에 주로 사용 됩니다. if 문에서 사용된 논리 연산자를 아래 예제를 통해서 알아 봅시다.

   

public class Example {

public static void main(String[ ] args) {
int character = 'A';
if( (character>=65) & (character<=90) ) {       // 참이므로 아래 문장이 실행된다.
System.out.println("대문자 입니다.");
}
if( (character>=97) && (character<=122) ) {   // character>=97 이 거짓이므로 
System.out.println("소문자 입니다.");     // 더 이상 판단하지 않고 빠져나감
}
if( !(character<48) && !(character>57) ) {      // character<48 이 거짓이다.
System.out.println("0~9 숫자 입니다."); // 더 이상 판단하지 않고 빠져나감
}

int number = 6;
if( (number%2==0) | (number%3==0) ) {               // 참이므로 실행된다.
System.out.println("2 또는 3의 배수 입니다.");
}
if( (number%2==0) || (number%3==0) ) {               //참이므로 실행된다.
System.out.println("2 또는 3의 배수 입니다.");
}
}

실행 결과는 다음과 같습니다.

대문자 입니다.
2 또는 3의 배수입니다.
2 또는 3의 배수입니다.



'IT > Java' 카테고리의 다른 글

대입 연산자  (0) 2020.04.20
비트 연산자  (0) 2020.04.20
비교 연산자  (0) 2020.04.16
문자열 결합 연산자  (0) 2020.04.15
산술 연산자  (0) 2020.04.14