OneDev

[C] 11. 논리연산자 - &&, ||, ! / Short Circuit Evaluation(SCE) 본문

Language/C

[C] 11. 논리연산자 - &&, ||, ! / Short Circuit Evaluation(SCE)

one_dev 2022. 7. 20. 21:45

 

지난 포스팅에서 if 조건문에 대해 학습하였다.

이번 포스팅에서는 조건문의 조건 부분에서 주로 사용되는 연산자인 논리연산자에 대해 알아보자.

논리 연산자(Logical Operator)란 어떤 조건식의 참 거짓을 판별하며 참이면 1, 거짓이면 0을 반환하는 연산자이다.

논리연산자에는 크게 논리곱연산자(&&),  논리합연산자(||)가 있다.

 

1. 논리곱 연산자(AND) - &&

두 값이 모두 참이이야 1을 반환하고 둘 중 하나라도 참이 아니라면 0을 반환한다.

int n = 1, m = 3;
if(n==1 && m==2) // m==2 라는 조건이 거짓이므로 0을 반환한다
if(n==1 && m ==3) // 두 조건 모두 참이므로 1을 반환한다

※ 왜 번거롭게 & 대신 &&로 논리곱 연산자를 표현하는 것일까?

결론부터 말하면 Short Circuit Evaluation (줄여서 SCE)를 사용하기 위해서이다.

아래의 예시를 보자.

int height = 178;
if(height > 180 && weigth <79) {......}

if 문 속 조건에서, 이미 첫 번째 조건인 height >180 이 거짓이기 때문에 컴퓨터는 굳이 뒤에있는  weight <79 부분을 볼 필요가 없다. AND 연산은 둘중 하나라도 거짓이면 0을 반환하기 때문에 이미 연산의 결과값이 정해져 있기 때문이다.

이런 경우처럼 한 조건식을 확인하였는데 전체 결과가 정해진 경우 컴퓨터는 이후의 조건식을 확인하지 않는데, 

이를 Short Circuit Evaluation 이라 한다.

만약 && 대신 & 를 사용한다면 SCE를 사용할 수 없다.

&&와 달리 & 는 정확한 연산결과를 제공해야 하므로 뒤의 식까지 모두 계산해야 하기 때문이다.

이에 반해 &&는 0 또는 1 만 반환하면 되므로 SCE를 사용할 수 있는것이다.

 

int height = 178;
if(height > 180 & weigth <79) {......} // & 연산자로는 SCE를 사용할 수 없다

 

2. 논리합 연산자(OR) - || 

논리합 연산자 || 는 위에서 살펴본 논리곱 연산자와는 다르게, 조건식 중 하나라도 참이면 1을, 전부 거짓일때만 0을 반환한다.

int height = 178;
int weight = 70;
if(height > 180 || weigth <79) {......} // 키에 대한 조건은 거짓이지만 몸무게 조건은 참이다

 

위의 예시에서 키와 몸무게 조건중 몸무게 조건을 만족하기 때문에 if 문 속 조건식은 1을 반환하게 된다.

 

 

3. ! (NOT)

! 은 부정을 취해주는 연산자이다. 쉽게 말해 참을 거짓으로, 거짓을 참으로 반전시켜주는 연산자인 것이다.

예를 들면 다음과 같다.

  • != : 같지 않다 (==의 부정)
  • 아래의 코드에서 if 문 속 조건 앞에 !을 취해준다면 조건이 거짓일 때 1을, 조건이 참일 때 0을 반환한다.
if(!(조건)){....}

작성중인 시점에 한글 이름을 까먹었지만 찾아보기 귀찮은 관계로 나중에 언젠가 내가 발견해 수정할 것이라 믿고 넘어가겠다.

 

'Language > C' 카테고리의 다른 글

[C] 13. 반복문 - while문/do while  (0) 2022.07.22
[C] 12. 반복문 - for문  (0) 2022.07.21
[C] 10. 조건문 - if 문  (0) 2022.07.20
[C] 9. 입력받기(scanf 함수)  (0) 2022.07.19
[C] 8. 오버플로우(overflow)  (0) 2022.07.15
Comments