[C#] 비트 연산자

728x90

1.비트연산자를 사용하는 이유

  1. 메모리와 성능 효율성: 비트 연산자는 데이터를 비트 단위로 조작하므로 메모리 사용을 최소화할 수 있습니다. 특히, 대량의 데이터를 다룰 때 이점을 가집니다. 비트 단위 연산은 메모리를 적게 사용하며, 빠르게 연산을 수행하여 성능을 향상시킬 수 있습니다.
  2. 하드웨어 제어와 최적화: 하드웨어를 제어하거나 특정 장치와의 통신에서 비트 연산자는 매우 유용합니다. 예를 들어, 특정 장치의 레지스터 값을 설정하거나 클리어하는 데에 사용됩니다.
  3. 암호화 및 보안: 암호화 알고리즘에서는 비트 연산자를 사용하여 데이터를 암호화하거나 해독하는 데 활용됩니다. 비트 연산은 암호화 기술에서 중요한 역할을 합니다.
  4. 비트 단위 조작: 데이터에서 특정 비트를 검사, 설정, 수정하는 등의 작업에서 비트 연산자는 매우 유용합니다. 이는 특정 상태를 저장하거나 데이터의 특정 부분을 조작하는 데 사용됩니다.

비트 연산자는 주로 하드웨어 제어, 암호화, 데이터 조작, 성능 최적화 등 다양한 분야에서 사용됩니다. 이러한 연산자들은 비트 단위에서 데이터를 조작하고 제어함으로써 프로그램의 효율성을 향상시킬 수 있습니다.

 

2.비트연산자 계산방법

비트연산자는 AND, OR, XOR, NOT, SHIFT등이 있습니다. 사용방법은 아래 코드의 주석을 확인하시면 됩니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //비트 연산자는 10진수가 아닌 이진수로 계산 -> 논리회로의 개념을 알아야 함
            //int 는 32비트로 표현됨
            int a = 1; // 00000000 00000000 00000000 00000001
            int b = 5; // 00000000 00000000 00000000 00000101
            int c = 0;
           

            //& 연산-> AND -> 두 비트 모두 1일 경우에 1을 반환
            // a = 00000000 00000000 00000000 00000001
            // b = 00000000 00000000 00000000 00000101
            // c = 00000000 00000000 00000000 00000001 -> 1
            c = a & b;
            Console.WriteLine(c); // 결과 1

            //| 연산-> OR -> 두 비트 중 하나만 1이여도 1을 반환
            // a = 00000000 00000000 00000000 00000001
            // b = 00000000 00000000 00000000 00000101
            // c = 00000000 00000000 00000000 00000101 -> 5
            c = a | b;
            Console.WriteLine(c);// 결과 5

            //^연산 -> XOR ->두개의 비트가 서로 다른 경우 1을 반환
            // a = 00000000 00000000 00000000 00000001
            // b = 00000000 00000000 00000000 00000101
            // c = 00000000 00000000 00000000 00000100 -> 4
            c = a ^ b;
            Console.WriteLine(c); //결과 4

            //~ -> NOT -> 비트에서 1이면 0으로, 0이면 1로 반환 -> 계산방법은 이진수로 변환 후 +1을 한 후 다시 십진수로 변환하고 -부호를 붙인다. 
            //  a = 00000000 00000000 00000000 00000001
            // ~a = 11111111 11111111 11111111 11111110 -> 1의 보수 00000000 00000000 00000000 00000001 ->2의 보수: +1 -> 00000000 00000000 00000000 00000010 -> -2
            //  b = 00000000 00000000 00000000 00000101
            // ~b = 11111111 11111111 11111111 11111010 -> 1의 보수 00000000 00000000 00000000 00000101 ->2의 보수: +1 -> 00000000 00000000 00000000 00000110 -> -6
            Console.WriteLine(~a);
            Console.WriteLine(~b);


            //shift 연산자 ->비트를 이동시키는 연산자
            // << 좌측으로 이동 , >> 우측으로 이동 -> 계산방법은 shift 연산자 다음 값이 n일 때 좌측이동은 2의 n제곱만큼 곱하기, 우측이동은 2의 n제곱만큼 나눈 몫
            c = a << 1;  
            // a = 00000000 00000000 00000000 00000001
            // c = 00000000 00000000 00000000 00000010 -> 2 -> 1*2
            Console.WriteLine(c);

            c = a << b;
            // a = 00000000 00000000 00000000 00000001
            // c = 00000000 00000000 00000000 00010000 -> 1*2^5 = 32
            Console.WriteLine(c);

            c = b >> 1;
            // b = 00000000 00000000 00000000 00000101
            // c = 00000000 00000000 00000000 00000010 -> 2 ->5 /2
            Console.WriteLine(c);

            c = a >> b;
            //a보다 b가 더 크므로 나눈 몫은 0 -> c=0
            Console.WriteLine(c);

        }
    }
}

 

 

'C# Programming > C#' 카테고리의 다른 글

[C#] 데이터 베이스 연결 및 기본 CRUD  (1) 2024.05.14
[C#] 객체지향 프로그래밍  (0) 2024.05.14
[C#] 배열과 foreach문(반복)  (0) 2024.05.14
C# 설치 및 환경설정  (1) 2024.05.13
C#이란?  (0) 2024.05.13