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 |