Untitled

<aside> 💡 목차


</aside>

https://github.com/POCU/COMP1500CodeSamples

용어 & 자료형 크기 & 표현 범위 요약

연산자?

<aside> 💡 연산을 담당하는 무엇


연산자는 하나 이상의 피연산자를 가짐

IR , RTL , operand

MIPS 명령어 1️⃣ -  산술논리연산자

Untitled

</aside>

비트 하나당 bool 하나를 집어넣음

<aside> 💡 비트 플래그란


불리언 형을 따로 쓰지 않고도

비트 하나당 불리언 하나를 집어 넣을 수 있다는 의미이다.

</aside>

using System;

namespace BitFlag
{
    class Program
    {
        static void Main(string[] args)
        {
            const int BIT_FLAG_SIZE = 8; //1바이트에 8개의 비트가 들어간다고 정의한것임

            //모든 boolean 이 0이니까 거짓 상태라고 이해할 수 있다
            //1바이트 = 8개의 비트가 전부 0으로 초기화 0000 0000
            byte bitFlags = 0;

            //오른쪽에서부터 세번째 비트를 True로 설정
            //0000 0001 -> 0000 0100
            byte mask1 = 1 << 2; 

            //OR 된 값이 bitFlags에 대입된다
            //0000 0000 <- 0000 0100 = 0000 0100
            bitFlags |= mask1;

            //PadLeft는 빈칸을 채우겠다는 의미
            //해당 코드에선 전체 크기에서 값이 없는 빈칸을0으로 채우겠다는 의미
            Console.WriteLine("bitFlags: " + Convert.ToString(bitFlags, 2).PadLeft(BIT_FLAG_SIZE, '0'));

            //두 비트를 한번에 비교하는 코드
            // 0000 1000 | 0010 0000
            // = 0010 1000(40)
            byte mask3 = (1 << 3) | (1 << 5);

            //현재 bitFlags = 0000 0100
            // 0000 0100 | 0010 1000
            // = 0010 1100
            bitFlags |= mask3;

            Console.WriteLine("bitFlags: " + Convert.ToString(bitFlags, 2).PadLeft(BIT_FLAG_SIZE, '0'));

            //근데 이제 3번째 비트를 끄고싶음
            //아까 mask1 은 0000 0100 이었지?
            //mask 1을 반전시킨다 1111 1011
            //그리고 현재 bitFlags와 AND 연산한다
            //0010 1100 & 1111 1011
            // = 0010 1000
            bitFlags &= (byte)~mask1;

            Console.WriteLine("bitFlags: " + Convert.ToString(bitFlags, 2).PadLeft(BIT_FLAG_SIZE, '0'));

            //만약 모든 비트를 꺼버리고싶으면, 0과 AND함
            //0010 1000 & 0000 0000
            // = 0000 0000
            bitFlags &= 0;

            Console.WriteLine("bitFlags: " + Convert.ToString(bitFlags, 2).PadLeft(BIT_FLAG_SIZE, '0'));

            //문자열도 비트플래그로 컨트롤 가능하다
            //A는 0100 0001
            //공백은 0010 0000
            // 0100 0001 | 0010 0000
            // 0110 0001 = a
            //즉, 소문자 a가 출력될것이다
            char char1 = 'A';
            int result1 = char1 | ' ';

            Console.WriteLine("result1: " + (char)result1);

            
            char char2 = 'a';
            int result2 = char2 & '_';

            Console.WriteLine("result2: " + (char)result2);
        }
    }
}