본문 바로가기

Learn & Develop/C

C언어 - 연산자(2)

Bit 연산자 ' &, |, ^, ~, <<, >> '

 주로 하드웨어 관련 프로그래밍에 활용되지만, 그 이외의 영역에서도 사용되기도 한다.

 논리 방식은 Byte연산자인 ' &&(AND), ||(OR), !(NOT) ' 와 크게 다를 것 없지만, 여기선 ' ^(XOR) ' 이 따로 존재한다.

// 예제 1
#include <stdio.h>
int main(void) {
	int num1 = 15; // 00000000 00000000 00000000 00001111 <int는 4바이트
	int num2 = 20; // 00000000 00000000 00000000 00010100
	int num3 = num1 & num2; // 00000000 00000000 00000000 00000100 == 10진수 변환 '4'
    
    // &연산자 : 두 개의 Bit가 모두 1일 때, True를 반환     
	printf("AND Calculating result : %d\n", num3);

	num1 = 15; // 00000000 00000000 00000000 00001111
	num2 = 20; // 00000000 00000000 00000000 00010100
	num3 = num1 | num2; // 00000000 00000000 00000000 00011111 == 10진수 변환 '31'
	
    // |연산자 : 두 개 중 하나의 Bit만 1어도 True를 반환
    printf("OR Calculating result : %d\n", num3);

	num1 = 15; // 00000000 00000000 00000000 00001111
	num2 = 20; // 00000000 00000000 00000000 00010100
	num3 = num1 ^ num2; // 00000000 00000000 00000000 00011011 == 10진수 변환 '27'
	
    // ^연산자 : 두 개의 Bit가 서로 같으면 False, 다르면 True를 반환
    printf("XOR Calculating result : %d\n", num3);

	num1 = 15; // 00000000 0000000 0000000 00001111
	int num4 = ~num1; // 11111111 11111111 11111111 11110000 == 10진수 변환 '-16'
	
    // ~연산자 : 0은 1로, 1은 0으로 반전시킴(보수연산).
    printf("NOT Calculating result : %d\n", num4);

	int result1 = num1 << 1; // 00000000 00000000 00000000 00011110 == 10진수 변환 '30'
	int result2 = num1 << 2; // 00000000 00000000 00000000 00111100 == 10진수 변환 '60'
	int result3 = num1 << 3; // 00000000 00000000 00000000 01111000 == 10진수 변환 '120'
	
    // <<연산자 : 'num << n'에서 n만큼 비트의 왼쪽 이동
    printf("Result1: %d, Result2: %d, Result3: %d\n", result1, result2, result3);

	int num5 = 120; //00000000 00000000 00000000 01111000
	result1 = num5 >> 1; // 00000000 00000000 00000000 00111100 == 10진수 변환 '60'
	result2 = num5 >> 2; // 00000000 00000000 00000000 00011110 == 10진수 변환 '30'
	result3 = num5 >> 3; // 00000000 00000000 00000000 00001111 == 10진수 변환 '15'
	
    // >>연산자 : 'num >> n'에서 n만큼 비트의 오른쪽 이동
    printf("Result1: %d, Result2: %d, Result3: %d\n", result1, result2, result3);
	
    return 0;
}
//실행 결과

AND Calculating result : 4
OR Calculating result : 31
XOR Calculating result : 27
NOT Calculating result : -16
Result1: 30, Result2: 60, Result3: 120
Result1: 60, Result2: 30, Result3: 15

 

 

복합 대입 연산자 ' *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |= '

 복합 대입 연산자는 다음과 같이 식을 생략한 것이다.

num1 = num1 * num2 num1 *= num2
num1 = num1 / num2 num1 /= num2
num1 = num1 % num2 num1 %= num2
num1 = num1 + num2 num1 += num2
num1 = num1 - num2 num1 -= num2
num1 = num1 << num2 num1 <<= num2
num1 = num1 >> num2 num1 >>= num2
num1 = num1 & num2 num1 &= num2
num1 = num1 ^ num2 num1 ^= num2
num1 = num1 | num2 num1 |= num2

 

 

 

아직 미숙한 부분이 많습니다. 조금씩 수정해나가겠습니다.

오타, 지적 환영합니다.