C#/연산자

[C#] 비트연산자

도도돋치 2025. 3. 20. 18:51
Contents 접기
728x90

비트 연산자는 정수(숫자)를 이진수(0과 1)로 변환한 후, 각각의 비트 단위로 연산하는 연산자이다.

 

비트 연산자의 종류

연산자 설명 예제 (10 & 7)
& (AND) 둘 다 1이면 1 10 & 7 = 2 (1010 0111 = 0010)
| 하나라도 1이면 1 10 | 7 = 15 (1010 0111 = 1111)
^ (XOR) 다르면 1, 같으면 0 10 ^ 7 = 13
~ (NOT) 모든 비트를 반전 ~10 = -11 (2의 보수)
<< (왼쪽 시프트) 비트를 왼쪽으로 이동 10 << 1 = 20
>> (오른쪽 시프트) 비트를 오른쪽으로 이동 10 >> 1 = 5

& (비트 AND)

둘 다 1일 때만 1, 아니면 0
int a = 10; // 1010 (2진수)
int b = 7;  // 0111 (2진수)
int result = a & b; // 0010 (2진수) = 2 (10진수)
Console.WriteLine(result); // 출력: 2

🔹 10(1010) & 7(0111) → 2(0010)

 

| (비트 OR)

하나라도 1이면 1
int a = 10; // 1010
int b = 7;  // 0111
int result = a | b; // 1111 (2진수) = 15 (10진수)
Console.WriteLine(result); // 출력: 15

🔹 10(1010) | 7(0111) → 15(1111)

 

^ (비트 XOR)

다르면 1, 같으면 0
int a = 10; // 1010
int b = 7;  // 0111
int result = a ^ b; // 1101 (2진수) = 13 (10진수)
Console.WriteLine(result); // 출력: 13

🔹 10(1010) ^ 7(0111) → 13(1101)

 

~ (비트 NOT)

비트를 반전 (0 → 1, 1 → 0)
C#에서는 부호까지 반전 (2의 보수 개념 적용)
int a = 10;  // 1010 (2진수)
int result = ~a; // 반전: 1111 1111 1111 1111 1111 1111 1111 0101 = -11
Console.WriteLine(result); // 출력: -11

🔹 10(1010)의 반전은 -11 (2의 보수)

 

<< (왼쪽 시프트)

비트를 왼쪽으로 이동 = ×2의 거듭제곱
int a = 10; // 1010
int result = a << 1; // 왼쪽 1칸 이동 → 10100 = 20
Console.WriteLine(result); // 출력: 20

🔹 10(1010) << 1 → 20(10100)
🔹 a << n  a × 2ⁿ

 

>> (오른쪽 시프트)

비트를 오른쪽으로 이동 = ÷2의 거듭제곱
int a = 10; // 1010
int result = a >> 1; // 오른쪽 1칸 이동 → 0101 = 5
Console.WriteLine(result); // 출력: 5

🔹 10(1010) >> 1 → 5(0101)
🔹 a >> n  a ÷ 2ⁿ

 

📖 정리

 & → 둘 다 1일 때만 1
 | → 하나라도 1이면 1
 ^ → 다르면 1, 같으면 0
 ~ → 모든 비트 반전 (2의 보수 개념)
 << → 왼쪽 이동 (×2의 거듭제곱)
 >> → 오른쪽 이동 (÷2의 거듭제곱)

 

728x90

'C# > 연산자' 카테고리의 다른 글

[C#] 연산자 우선순위  (0) 2025.03.19
[C#] 논리연산자  (0) 2025.03.19
[C#] 관계(비교)연산자  (0) 2025.03.19
[C#] 오버플로우와 언더플로우  (0) 2025.03.19
[C#] 복합 대입 연산자, 증감 연산자(++,--)  (0) 2025.03.19