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 |
아직 미숙한 부분이 많습니다. 조금씩 수정해나가겠습니다.
오타, 지적 환영합니다.
'Learn & Develop > C' 카테고리의 다른 글
C언어 - 상수의 종류와 자료형의 변환 (0) | 2021.09.03 |
---|---|
C언어 - 기본 자료형의 종류와 수의 표현방식 (0) | 2021.09.03 |
C언어 - 연산자(1) (0) | 2021.09.02 |
C언어 - 2진수와 16진수 (0) | 2021.09.02 |
C언어 - 다차원 배열(1차원 배열, 2차원 배열, 3차원 배열) (0) | 2019.12.01 |