C언어 논리 연산자 AND, OR, NOT 간단한 예제

C언어 논리 연산자에서 && 연산자는 좌변과 우변이 모두 일 때 을 반환합니다. || 연산자는 좌변과 우변이 한 쪽만 이여도 전체가 입니다. ! 연산자는 /거짓을 반대로 반환합니다.

C언어 논리 연산자

C언어 논리 연산자는 관계 연산자처럼 자료의 결과가 True(1) 또는 False(0)로 이루어진 데이터들을 서로 연산할 때 사용합니다. 또는 데이터를 강제로 1 또는 0으로 반환해서 연산합니다. 논리 연산의 결과는 똑같이 1 또는 0으로 반환됩니다.

연산자 이름 예제 의미
&& 논리 AND a && b a이고, b이면, a && b
|| 논리 OR a || b a이거나 b이면, a || b
! 논리 NOT !x a이면 !a거짓, a거짓이면 !a

a && b 와 같은 논리 연산자의 변수 a 및 변수 b는 보통 (x > y) && (x == y)와 같은 관계 연산자의 수식으로 이루어진 경우가 많습니다.

a && b

&& 연산자는 a && b 수식에서 좌변 a이고, 동시에 우변 b일 경우 전체 수식 a && b이 됩니다.

#include<stdio.h>
void main() {
	int x = 5;
	int y = 3;
	int z = 2;

	printf("%d", (x > y) && (x > z) ); // x > y는 5 > 3으로 참입니다. x > z는 5 > 2로 참입니다. 따라서 && 전체 수식도 참입니다.
}

결과

1

a && b 수식에서 좌변 a이지만, 우변 b거짓인 경우 a && b거짓(0)이 반환됩니다.

#include<stdio.h>
void main() {
	int x = 5;
	int y = 3;
	int z = 2;

	printf("%d", (x > y) && (x == z) ); // x > y는 5 > 3으로 참입니다. x == z는 5와 2가 다르므로 거짓입니다. 따라서 && 전체 수식은 거짓(0)입니다.
}

결과

0

a && b 수식에서 좌변 a거짓이고, 우변 b인 경우 거짓(0)이 반환됩니다.

#include<stdio.h>
void main() {
	int x = 5;
	int y = 3;
	int z = 2;

	printf("%d", (x < y) && (x > z) ); // x < y 는 5 < 3으로 거짓, x > z 는 5 > 2으로 참, 전체 결과는 거짓(0)입니다.
}

결과

0

a && b 수식에서 좌변 a거짓이고, 우변 b거짓이면, a && b거짓(0)이 반환됩니다.

#include<stdio.h>
void main() {
	int x = 5;
	int y = 3;
	int z = 2;

	printf("%d", (x < y) && (x < z) ); // x < y 는 5 < 3으로 거짓, x < z 는 5 < 2으로 거짓, 전체 결과는 거짓(0)입니다.
}

결과

1

a || b

|| 연산자는 a || b 수식에서 좌변 a이거나 우변 b이면 전체 수식 a || b이 됩니다.

#include<stdio.h>
void main() {
	int x = 5;
	int y = 3;
	int z = 2;

	printf("%d", (x > y) || (x > z) ); // x > y 는 5 > 3으로 참, x > z 는 5 > 2으로 참, 전체 결과는 참(1)입니다.
}

결과

1

a || b 수식에서 좌변 a이고, 우변 b거짓이여도 전체 a || b 수식은 참(1)을 반환합니다.

#include<stdio.h>
void main() {
	int x = 5;
	int y = 3;
	int z = 2;

	printf("%d", (x > y) || (x < z) ); // x > y 는 5 > 3으로 참, x < z 는 5 < 2으로 거짓, 전체 결과는 참(1)입니다.
}

결과

1

a || b 수식에서 좌변 a거짓이지만, 우변 b일 경우 전체 수식 a || b참(1)을 반환합니다.

#include<stdio.h>
void main() {
	int x = 5;
	int y = 3;
	int z = 2;

	printf("%d", (x == y) || (x != z) ); // x == y 는 5와 3이 같지 않으므로 거짓, x != z 는 5와 2가 서로 다르므로 참, 전체 결과는 참(1)입니다.
}

결과

1

a || b 수식에서 좌변 a거짓이고, 우변 b거짓인 경우, 전체 수식 a || b거짓(0)을 반환합니다.

#include<stdio.h>
void main() {
	int x = 5;
	int y = 3;
	int z = 2;

	printf("%d", (x == y) || (x <= z) ); // x == y 는 5와 3이 같지 않으므로 거짓, x <= z 는 5가 2보다 작거나 같지 않으므로 거짓, 전체 결과도 거짓(0)입니다.
}

결과

0

!a

! 연산자는 !a 수식에서 a이면 !a거짓을 반환합니다.

#include<stdio.h>
void main() {
	int x = 5;
	int y = 3;

	printf("%d", ! (x > y) ); // x > y는 5 > 3으로 참입니다. 따라서 ! (x > y)는 반대로 거짓을 반환합니다.
}

결과

0

!a 수식에서 a거짓이면, !a을 반환합니다.

#include<stdio.h>
void main() {
	int x = 5;
	int y = 3;

	printf("%d", ! (x == y) ); // x == y는 5와 3이 서로 같지 않으므로 거짓입니다. 따라서 ! (x == y)는 반대로 참(1)을 반환합니다.
}

결과

1

논리 연산자의 처리 과정을 잘 살펴보면, 논리 연산자는 괄호 안의 수식 보다 나중에 처리 된다는 것을 알 수 있습니다.