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

switch

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

//switch

            int num = 10;

            switch (num)    //c++ 에서는 정수로 바뀔 수 있는 것만 됐는데(int, char, enum 변수)

                    //c#은 문자도 가능

            {

                case 1:

                    break;

                case 10:

                    break;

                default:

                    break;

            }

            //c#은 문자도 가능

            //하지만 문자열 비교는 자원 소모가 크므로 안하는 것이 좋다.

            string str2 = "개구리";

            switch (str2)   

            {

                  /*

                     //아래와 같이 명령어가 있는데 break;가 없으며 에러난다.(c++에서는 가능했다.)

            case "개구리":

                Console.WriteLine("개구리 입니다.");

            case "두꺼비":

                Console.WriteLine("두꺼비 입니다.");

                break;

                 

                     //아래와 같이 명령어가 없으면 가능하다.

            case "개구리":

            case "두꺼비":

                Console.WriteLine("두꺼비 입니다.");

                break;

                 */

                case "개구리":

                    Console.WriteLine("개구리 입니다.");

                    break;

                case "두꺼비":

                    Console.WriteLine("두꺼비 입니다.");

                    break;

                default:

                    break;


            }

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

반복문  (0) 2016.05.04
비트 연산  (0) 2016.05.04
사칙연산  (0) 2016.05.04
배열  (0) 2016.05.04
데이터 타입  (0) 2016.05.04

사칙연산

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

//사칙연산 + - * / % ++ --

            //c++과 다른 건 %(나머지)

            //int는 같은데

            int i1 = 32;

            int i2 = 5;

            Console.WriteLine("{0} % {1} = {2}", i1, i2, i1 % i2);

            //float도 가능 해지게 됐다.

            float f1 = 3.14f;

            float f2 = 0.7f;

            Console.WriteLine("{0} % {1} = {2}", f1, f2, f1 % f2);


            //아래 ++ 연산은 c++과 같다.

            int n0 = 10;

            int n1 = n0;

            Console.WriteLine("n0 = {0}, n1 = {1}", n0, n1);    //10, 10

            n1 = n0++;

            Console.WriteLine("n0 = {0}, n1 = {1}", n0, n1);    //11, 10;

            n1 = ++n0;

            Console.WriteLine("n0 = {0}, n1 = {1}", n0, n1);    //12, 12;

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

비트 연산  (0) 2016.05.04
switch  (0) 2016.05.04
배열  (0) 2016.05.04
데이터 타입  (0) 2016.05.04
string 처리 기본  (0) 2016.05.04