ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C# 개념] 4.9 비트 연산자
    Anna belly belly hard/C# 2023. 7. 10. 14:50
    반응형

    - 컴퓨터는 원래 0 과 1의 비트 데이터만 다루는 기계 인데, 지금까지의 데이터 형식을 보면 1바이트 크기의 형식이 가장 작습니다. 비트를 무려 8개나 담을 수 있는 크기의 데이터 형식.

    - 지금 까지 본 데이터 형식의 크기도 모두 '바이트' 단위로 이루어져 있다.

    - 바이트 단위가 대부분의 데이터를 다루기에 용이한 크기이긴하지만, 어쨋든 비트 수준에서 데이터를 가공해야 하는 경우가 생기는데, 비트 연산자는 이를 위한 연산자.

     

    4.9.1 시프트 연산자

    1) Shift Operator

    - 비트를 왼쪽이나 오른쪽으로 이동시키는 연산

    2) 왼쪽 시프트 연산

    3) 오른쪽 시프트 연산

    4) 음수에 대한 오른쪽 시프트 연산

    5) 시프트 연산자의 사용법

    - 시프트 연산자는 산술 연산자 처럼 피연산자 두개를 받는다.

    - 왼쪽 피 연산자는 왼본데이터, 오른쪽 피 연산자는 옮길 비트의 수입니다.

    6) 시프트 연산의 의미

    - 240(0000 0000 1111 0000) 을 왼쪽으로 2비트 시프트한 결과는 960 (0000 0011 1100 0000)

    - 오른쪽으로 2비트 시프트한 결과는 60

    - 원본 데이터를 a , 옮긴 비트 수를 b 라고 할때,

    왼쪽 시프트 연산을 하면 a x 2b ,

    오른쪽 시프트 연산을 하면 a : 2b

    - 이 점을 이용해서 시프트 연산은 고속의 곱셈과 나눗셈을 구현하는 데 사용하기도 하고,

    - & 연산자, | 연산자와 함께 byte 처럼 작은 단위로 쪼개진 데이터를 다시 하나의 int 나 long 형식으로 재조립 하는 데 사용

     

    using System;
    
    namespace ShiftOperator
    {
        class MainApp
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Testing <<...");
    
                int a = 1;
                /* 1바이트(8비트)로 나타낼수 있는 수는 256가지 입니다.
                   따라서 8자리의 16진수면 int 형식이 표현하는 모든수를 나타낼수 있습니다.
                 */
                Console.WriteLine("a     :{0:D5} (0X{0:x8})", a);
                Console.WriteLine("a << 1:{0:D5} (0X{0:x8})", a << 1);
                Console.WriteLine("a << 2:{0:D5} (0X{0:x8})", a << 2);
                Console.WriteLine("a << 5:{0:D5} (0X{0:x8})", a << 5);
                Console.WriteLine("\nTesting >>...");
    
                int b = 255;
                Console.WriteLine("b     :{0:D5} (0X{0:x8})", b);
                Console.WriteLine("b >> 1:{0:D5} (0X{0:x8})", b >> 1);
                Console.WriteLine("b >> 2:{0:D5} (0X{0:x8})", b >> 2);
                Console.WriteLine("b >> 5:{0:D5} (0X{0:x8})", b >> 5);
                Console.WriteLine("\nTesting >>> 2...");
    
                int c = -255;
                Console.WriteLine("c     :{0:D5} (0X{0:x8})", c);
                Console.WriteLine("c >> 1:{0:D5} (0X{0:x8})", c >> 1);
                Console.WriteLine("c >> 2:{0:D5} (0X{0:x8})", c >> 2);
                Console.WriteLine("c >> 5:{0:D5} (0X{0:x8})", c >> 5);
    
            }
        }
    }

     

     

    4.9.2 비트 논리 연산자

    - 논리 연산 : 참 또는 거짓의 진릿값을 피연산자로 하는 연산

    - 비트 논리 연산 : 데이터의 각 비트에 대해 수행하는 논리 연산

    - 비트 논리 연산자는 bool 형식 외에 정수 계열 형식의 피연산자에 대해서도 사용할 수 있다.

    - 우리가 사용하는 데이터가 0 과 1로 이루어져 있다는 사실

    -  int 형식 데이터는 4바이트,  즉 32개의 비트로 이루어짐

    -  long 형식 데이터는 8바이트, 즉 64개의 비트로 이루어짐

    - 비트 논리 연산은 이 비트 덩어리를 이루고 있는 각 비트에 대해 1 은 참, 0 은 거짓으로 해서 논리 연산을 하는 것

     

     

    using System;
    
    namespace BitwiseOperator
    {
        class MainApp
        {
            static void Main(string[] args)
            {
                int a = 9;
                int b = 10;
    
                Console.WriteLine($"{a} & {b} : {a&b}");
                Console.WriteLine($"{a} | {b} : {a | b}");
                Console.WriteLine($"{a} ^ {b} : {a ^ b}");
    
                int c = 255;
                Console.WriteLine("~{0}(0x{0:X8}) :{1}(0x{1:X8}) ", c,~c);
            }
        }
    }

    반응형
Designed by Tistory.