본문 바로가기
Programming/C

[C언어] 논리 연산자와 비트 연산자

by 고간디 2022. 5. 2.

논리 연산자 (Logical Operator)

논리 연산자는 주어진 논리식을 판단해서, 참과 거짓을 결정하는 연산자입니다

if 조건문에서 자주 쓰이는 연산자입니다

 

컴퓨터에서는 일반적으로 참(True)를 숫자 1로, 거짓(False)을 숫자 0으로 표현합니다

다만 C언어에서는 0을 제외한 모든 수를 참(True)로 취급합니다

 

논리 연산자 설명
AND (논리곱) && 양쪽 모두 참일 때 참
OR (논리합) || 양쪽 중 하나라도 참일 때 참
NOT (논리부정) ! 참이면 0, 거짓이면 1 반환 (참과 거짓 뒤집음)

AND와 OR 연산은 '그리고', '또는' 연산으로 두 개의 피연산자를 가지는 이항 연산자입니다

여기서 피연산자들의 결합 방향은 왼쪽에서 오른쪽입니다

NOT 연산자는 AND와 OR 연산자와는 다르게 피연산자가 하나이며, 결합 방향은 오른쪽에서 왼쪽입니다

 


int num1 = 10;
int num2 = 12;

int result = (num1==10 && num2==12);

print(result)

위 코드를 실행하면 숫자 1이 출력됩니다

하나의 문장 안에 여러 개의 연산자가 존재하는 경우 우선 순위에 따라서 연산이 진행됩니다

[C언어] #5 연산자 - 연산자의 우선 순위와 결합 방향 (tistory.com)

 

[C언어] #5 연산자 - 연산자의 우선 순위와 결합 방향

연산자(Operator)란 프로그램에서 산술식이나 연산식을 표현하고 처리하기 위해 제공되는 다양한 기호를 의미합니다 연산자에는 산술 연산자, 대입 연산자, 증감 연산자, 비교 연산자, 논리 연산

hyungin0505.tistory.com

위 코드에서는 우선 순위에 따라서 num1==10 && num2==12 에서는 관계 연산자인 num1==10과 num2=12가 먼저 진행되고 그 다음에 논리 연산자인 &&가 실행된 것을 알 수 있습니다

 

num1과 num2라는 변수를 각각 10과 12로 지정해주었기 때문에 num1==10과 num2==12의 논리식은 참이 됩니다

따라서 두 논리식은 참을 나타내는 1로 환산합니다

 

두 논리식 모두 참이기 때문에 결과는 참인 1로 나오게 되는 것입니다

 


비트 연산자 (Bitwise Operator)

비트 연산자는 논리 연산자처럼 논리 연산을 할 때 사용하는 연산자입니다

논리 연산자와는 다르게 바이트보다 작은 비트(bit)단위로 논리 연산을 하며, 전체 비트를 왼쪽이나 오른쪽으로 이동시킬 때에도 사용합니다

여기서 비트란 2진수를 나타냅니다

예를 들어, 10진수인 10과 12를 2진수인 비트로 나타내면 각각 1010, 1100입니다

논리 비트 연산자 설명
비트 AND 연산 & 대응되는 비트가 모두 1이면 1 반환
비트 OR 연산 | 대응되는 비트 중 하나라도 1이면 1 반환
비트 XOR 연산 ^ 대응되는 비트가 서로 다르면 1 반환
비트 NOT 연산 ~ 1이면 0, 0이면 1로 반전시킴
left shift 연산 << 지정한 수만큼 비트를 전부 왼쪽으로 이동
right shift 연산 >> 부호 유지하면서 지정한 수만큼 비트 전부 오른쪽 이동

우리는 10진수를 사용하는데 비트 연산은 모든 연산을 2진수로 처리해서 생소할 수 있습니다

 

비트 연산자는 비트로 옵션을 설정할 떄 주로 사용되고, 저장 공간을 아낄 수 있는 장점이 있습니다

이러한 방식을 플래그(Flag)라고 부릅니다

 

사실 요즘에는 비트 연산자를 많이 사용하지 않습니다

과거에는 제한된 환경에서 복잡한 연산을 효율적으로 하기 위해서 직접 비트 단위 연산을 사용했습니다

하지만, 이제는 시간이 흐르고 기술이 발전함에 따라 하드웨어가 발달해서 비트 단위 연산을 사용하지 않고도 충분히 빠르게 프로그래밍을 할 수 있게 되었습니다

 

하지만, 앞서 말했듯 메모리 공간을 줄이고, 성능을 약간이라도 향상시킬 수 있기 때문에 비트 단위 연산은 하드웨어 관련 프로그래밍 같은 제한된 환경의 시스템을 위한 프로그램에서는 자주 사용되기도 합니다

 

더보기

참고

TCP School

코딩 도장

네이버 블로그 'hj_meerkat'

 

728x90
반응형

댓글