midas+son의 크리에이티브(creative) 이야기

비트 연산

공부/C#2016. 5. 4. 14:11

 //비트 연산자 <<, >>, &, | 

            //2진법

            //<<왼쪽 시프트 - 한번 시프트에 2배 증가. 오른쪽 새로 생기는 건 0으로 처리. 왼쪽에 사라는건 날라감

            //>>오른쪽 시프트 - 한번 시프트에 절반 감소. 왼쪽에 새로 생기는건 0으로 처리. 오른쪽에 사라지는건 날라감

            int bitA = 4;   //100

            int bitB = 2;   // 10

            Console.WriteLine("bitA : {0}, bit : {1}",

                Convert.ToString(bitA, 2),  //2진수로 컨버트

                Convert.ToString(bitB, 2)); //2진수로 컨버트


            Console.WriteLine("{0} & {1} = {2}",

                Convert.ToString(bitA, 2),

                Convert.ToString(bitB, 2),

                Convert.ToString(bitA & bitB, 2));  // &연산


            Console.WriteLine("{0} | {1} = {2}",

                Convert.ToString(bitA, 2),

                Convert.ToString(bitB, 2),

                Convert.ToString(bitA | bitB, 2));  // | 연산


            //비트 플래그 - 무기장착을 예로 들어 봄

            int sword = 0x01;   //16진수 => 2진수로 0000 0001 //앞에 더있는 0000 0000 0000 0000 0000 0000 은 생략

            int staff = 0x02;   //0000 0010

            int axe = 0x04;     //0000 0100

            int spear = 0x08;   //0000 1000

            int bow = 0x10;     //0001 0000


            int weaponUsable = sword | axe | spear; //0000 1101


            if((weaponUsable & spear) != 0)

            {

                //spear가 true가 됐다

                Console.WriteLine("나는 창을 쓸 수 있다.");

            }

            else

            {

                //spear가 false가 됐다

                Console.WriteLine("나는 창을 쓸 수 없다.");

            }


            //weaponUsable : 0000 1101

            //spear를 뺴고자 한다.

            //spear : 0000 1000

            //~spear (보수)  :1111 0111

            //원하는 결과    : 0000 0101

            //weaponUsable와 spear의 보수값을 & 하면 원하는 결과가 나온다.

            weaponUsable = weaponUsable & (~spear);


            if ((weaponUsable & spear) != 0)

            {

                //spear가 true가 됐다

                Console.WriteLine("나는 창을 쓸 수 있다.");

            }

            else

            {

                //spear가 false가 됐다

                Console.WriteLine("나는 창을 쓸 수 없다.");

            }


            //1byte는 8bit => 0000 0000

            int value = 5; // 0000 0000 0000 0000 0000 0000 0000 0101

            Console.WriteLine("{0} << 2 = {1}",

                value, Convert.ToString(value << 2, 2)); // 0001 0100

            Console.WriteLine("{0} >> 2 = {1}",

                value, Convert.ToString(value >> 2, 2)); // 0000 0001

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

시간 측정 Stopwatch  (0) 2016.05.04
반복문  (0) 2016.05.04
switch  (0) 2016.05.04
사칙연산  (0) 2016.05.04
배열  (0) 2016.05.04