Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 비트 연산자 및 비트 시프트 연산자 완벽 가이드

C# 비트 연산자란?

비트 연산자(Bitwise Operator)는 데이터를 비트(bit) 단위로 처리하며, 각 비트마다 개별적으로 연산을 수행하는 연산자입니다. 주로 플래그(flag) 관리, 비트 마스킹, 성능 최적화 등에 활용됩니다.

C#에서 지원하는 비트 연산자는 다음 표와 같습니다. 변수 A에는 60(이진수 0011 1100), 변수 B에는 13(이진수 0000 1101)이 저장되어 있다고 가정합니다.

연산자설명예제
&비트 AND 연산자. 두 피연산자 모두에 해당 비트가 설정되어 있을 때만 결과에 비트를 복사합니다.(A & B) = 12, 즉 0000 1100
|비트 OR 연산자. 두 피연산자 중 하나라도 해당 비트가 설정되어 있으면 결과에 비트를 복사합니다.(A | B) = 61, 즉 0011 1101
^비트 XOR 연산자. 두 피연산자 중 정확히 하나에만 비트가 설정되어 있을 때 결과에 비트를 복사합니다.(A ^ B) = 49, 즉 0011 0001
~비트 1의 보수(One's Complement) 연산자. 단항 연산자로, 모든 비트를 반전('뒤집기')하는 효과가 있습니다.(~A) = -61, 부호 있는 이진수의 2의 보수 표현으로 1100 0011
<<왼쪽 시프트 연산자. 왼쪽 피연산자의 값을 오른쪽 피연산자가 지정한 비트 수만큼 왼쪽으로 이동시킵니다.A << 2 = 240, 즉 1111 0000
>>오른쪽 시프트 연산자. 왼쪽 피연산자의 값을 오른쪽 피연산자가 지정한 비트 수만큼 오른쪽으로 이동시킵니다.A >> 2 = 15, 즉 0000 1111

참고로 왼쪽 시프트는 2의 거듭제곱을 곱하는 것과 같은 효과가 있고(A << n = A × 2ⁿ), 오른쪽 시프트는 2의 거듭제곱으로 나누는 것과 같은 효과가 있습니다(A >> n = A ÷ 2ⁿ). 따라서 곱셈·나눗셈 대신 시프트 연산을 사용하면 더 빠른 성능을 얻을 수 있습니다.

예제 코드

다음은 C#에서 비트 연산자를 구현하고 사용하는 방법을 보여주는 예제입니다.

using System;
namespace MyApplication {
    class Program {
        static void Main(string[] args) {
            int a = 60; /* 60 = 0011 1100 */
            int b = 13; /* 13 = 0000 1101 */
            int c = 0;
            // 비트 AND 연산자
            c = a & b; /* 12 = 0000 1100 */
            Console.WriteLine("Line 1 - Value of c is {0}", c);
            // 비트 OR 연산자
            c = a | b; /* 61 = 0011 1101 */
            Console.WriteLine("Line 2 - Value of c is {0}", c);
            // 비트 XOR 연산자
            c = a ^ b; /* 49 = 0011 0001 */
            Console.WriteLine("Line 3 - Value of c is {0}", c);
            // 비트 보수 연산자
            c = ~a; /* -61 = 1100 0011 */
            Console.WriteLine("Line 4 - Value of c is {0}", c);
            // 왼쪽 시프트 연산자
            c = a << 2; /* 240 = 1111 0000 */
            Console.WriteLine("Line 5 - Value of c is {0}", c);
            // 오른쪽 시프트 연산자
            c = a >> 2; /* 15 = 0000 1111 */
            Console.WriteLine("Line 6 - Value of c is {0}", c);
            Console.ReadLine();
        }
    }
}

실행 결과

Line 1 - Value of c is 12
Line 2 - Value of c is 61
Line 3 - Value of c is 49
Line 4 - Value of c is -61
Line 5 - Value of c is 240
Line 6 - Value of c is 15