카테고리 없음

[C#] 비트연산자

도도돋치 2025. 3. 19. 18:54
Contents 접기
728x90

컴퓨터는 0과 1(비트) 로 모든 데이터를 처리한다.
비트 연산자는 이 0과 1을 직접 조작할 때 사용되며, 성능이 중요하거나 저수준 프로그래밍에서 많이 활용된다.

비트 연산자란?

비트 연산자는 정수를 2진수(0과 1)로 변환한 후 비트 단위로 연산하는 연산자이다.
예를 들어, 5(10진수) → 101(2진수) 이런 식으로 변환한 후 연산이 진행된다.

C# 비트 연산자 종류

연산자 의미 설명
& AND 둘 다 1일 때만 1 (나머지는 0)
| OR 둘 다 0일 때만 0 
^ XOR 다르면 1, 같으면 0
~ NOT (보수) 0은 1로, 1은 0으로 반전
<< 왼쪽 시프트 비트를 왼쪽으로 이동 (곱하기 효과)
>> 오른쪽 시프트 비트를 오른쪽으로 이동 (나누기 효과)

& (비트 AND)

둘 다 1일 때만 1이 됨
int a = 5;  // 101 (2진수)
int b = 3;  // 011 (2진수)
int result = a & b; // 001 (1)

Console.WriteLine(result); // 출력: 1

📌 5(101) & 3(011) = 001 (1)

| (비트 OR)

하나라도 1이면 1이 됨
int a = 5;  // 101
int b = 3;  // 011
int result = a | b; // 111 (7)

Console.WriteLine(result); // 출력: 7

📌 5(101) | 3(011) = 111 (7)

^ (비트 XOR)

비트가 다르면 1, 같으면 0
int a = 5;  // 101
int b = 3;  // 011
int result = a ^ b; // 110 (6)

Console.WriteLine(result); // 출력: 6

📌 5(101) ^ 3(011) = 110 (6)

~ (비트 NOT)

0을 1로, 1을 0으로 반전 (음수 값 주의!)
int a = 5;  // 00000000 00000000 00000000 00000101 (32비트 기준)
int result = ~a;

Console.WriteLine(result); // 출력: -6

📌 ~5 = -(5 + 1) = -6 (C#은 음수 표현에 2의 보수 방식을 사용)

<< (왼쪽 시프트)

비트를 왼쪽으로 이동 → 2배 증가 효과
int a = 3;  // 0011 (2진수)
int result = a << 2; // 1100 (12)

Console.WriteLine(result); // 출력: 12

📌 3(0011) << 2 → 1100(12)

>> (오른쪽 시프트)

비트를 오른쪽으로 이동 → 2로 나눈 효과
int a = 8;  // 1000
int result = a >> 2; // 0010 (2)

Console.WriteLine(result); // 출력: 2

📌 8(1000) >> 2 → 0010(2)

728x90