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

반복문

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

//반복문

int i = 0;

            while(i < 10)

            {

                ++i;

                Console.WriteLine("While : {0}", i);

            }

            i = 0;


            do

            {

                ++i;

                Console.WriteLine("Do While : {0}", i);

            } while (i < 10);


            int[] test = new int [10];

            for (int j = 0; j < test.Length; ++j)

            {

                test[j] = j;

                Console.WriteLine("For : {0}", j);


            }


            //foreach(int nn in test) //test에 들어있는 것은 nn 변수로 받겠다

            //{

            //    Console.WriteLine("Foreach : {0}", nn);

            //}


            foreach (var nn in test) //c++ 에서 auto 가 C# 에서 var로 되었다

            {

                Console.WriteLine("Foreach : {0}", nn);

            }

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

Console Color  (0) 2016.05.04
시간 측정 Stopwatch  (0) 2016.05.04
비트 연산  (0) 2016.05.04
switch  (0) 2016.05.04
사칙연산  (0) 2016.05.04

비트 연산

공부/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

배열

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

//배열

            //int a[10]; //c++ 에서는 이렇게만...

            //c++ 에서는 배열을 자료형의 집합 이라고 생각하면 되지만

            //C#에서는 int와 int[]를 별도의 타입으로 생각하는 것이 낫다.

            int[] aa = new int[5];  //모두 0으로 초기화 (c++에서는 쓰레기 값이 들어갔었다.)

            int[] bb = new int[5] { 10, 20, 30, 40, 50 };

            int[] cc = new[] { 10, 20, 30, 40, 50, 60, 70 };

            int[] dd = { 1, 2, 3, 4 };


            //2차원 배열

            int[,] aaa = new int[3, 2]; //int[2]가 3개 있음

            int[,] aaa2 = new int[3, 2] { { 1, 2 }, { 2, 3 }, { 3, 5 } };   //초기화

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

switch  (0) 2016.05.04
사칙연산  (0) 2016.05.04
데이터 타입  (0) 2016.05.04
string 처리 기본  (0) 2016.05.04
[잡담]C# 공부 첫날 소감  (0) 2016.05.03

데이터 타입

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

//데이터 타입

            //c++이랑은 좀 차이가 있다.

            

            //string

            //c++에서는 기본적으로 없고 STL로 구현되어있다. 

            //C#에서 메모리 구조상에서 바뀌지 않는다. 새로 메모리 공간을 만든다.

            //string str = string.Format("string test : {0} {1} {0}", 10, "문자");

            //Console.WriteLine(str);


            //int형 크기, 최소값, 최대값

            //Console.WriteLine("int : {0} byte {1} ~ {2}" ,

            //    sizeof(int), int.MinValue, int.MaxValue);       //int

            Console.WriteLine("int : {0} byte {1:N} ~ {2:N}",   //N 기본 숫자 포맷팅 정수 셋째 자리마다 , 소수점아래 2자리

                sizeof(int), int.MinValue, int.MaxValue);       //int

            Console.WriteLine("uint : {0} byte {1:N} ~ {2:N}",

                sizeof(uint), uint.MinValue, uint.MaxValue);    //unsigned int

            Console.WriteLine("long : {0} byte {1:#,#} ~ {2:#,#}",  //#,#만 하면 소수점 없이 숫자 포맷 가능

                sizeof(long), long.MinValue, long.MaxValue);   //long


            //UInt16; UInt32; UInt64; //숫자 bit짜리 int;


            Console.WriteLine("decimal : {0} byte {1:#,#} ~ {2:#,#}",   //#,#만 하면 소수점 없이 숫자 포맷 가능

                sizeof(decimal), decimal.MinValue, decimal.MaxValue);   //10진수


            Console.WriteLine("byte : {0} byte {1} ~ {2}",   

                sizeof(byte), byte.MinValue, byte.MaxValue);   //byte   0 ~ 255


            Console.WriteLine("sbyte : {0} byte {1} ~ {2}",

                sizeof(sbyte), sbyte.MinValue, sbyte.MaxValue);   //sbyte -128 ~ 127


            //char

            //C#에서는 타입 체킹이 엄격하다.

            //기본적으로 unicode를 사용한다.

            //글자 하나를 받는 의미가 크다.

            char a = '글';   //그래서 한글도 들어갈 수 있다.(c++에서는 한글은 2byte가 필요한데 char는 1byte이다.)

            char b = 'a';


            Console.WriteLine("char : {0} byte {1} ~ {2}",

                sizeof(char), char.MinValue, char.MaxValue);   //char \0 ~ 0xffff


            Console.WriteLine("float : {0} byte {1} ~ {2}",

                sizeof(float), float.MinValue, float.MaxValue);   //float 


            Console.WriteLine("double : {0} byte {1} ~ {2}",

                sizeof(double), double.MinValue, double.MaxValue);   //double 


            Console.WriteLine("bool : {0} byte {1} ~ {2}",

                sizeof(bool), bool.FalseString, bool.TrueString);   //bool 


            //데이터 타입 끝

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

사칙연산  (0) 2016.05.04
배열  (0) 2016.05.04
string 처리 기본  (0) 2016.05.04
[잡담]C# 공부 첫날 소감  (0) 2016.05.03
정수, 실수 출력  (0) 2016.05.03

string 처리 기본

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


            //안좋은 string 더하는 방식 - 메모리 낭비가 심함

            string str1 = "Hello";

            string str2 = "World";

            Console.WriteLine(str1 + " " + str2);


            //좋은 string 더하는 방식

            //StringBuilder builder = new StringBuilder();    //C#에서 무조건 주소만 존재한다. class는 new 안해주면 생성되지 않는다.

            StringBuilder builder = new StringBuilder(10);    //공간을 잡아주는것이 좋다. AppendFormat 기본 잡아준 공간을 넘어가면 다시 생성되어 공간 확보하므로 메모리 낭비가 될수 있다.

            builder.AppendFormat(str1);

            builder.AppendFormat(" ");

            builder.AppendFormat(str2);

            Console.WriteLine(builder.ToString());  //웬만한 타입은 String으로 변환 가능하다

            Console.WriteLine(builder); //.ToString() 생략 가능


            builder.Remove(1, 2);   //1번 인덱스 부터 2개 글자 제거

            Console.WriteLine(builder);


            //글자 뒤에 다시 타입별로 추가

            builder.AppendFormat(" {0} {1}", a, str1);  //0은 int , str1은 string

            Console.WriteLine(builder);


            Console.WriteLine("1을 입력하시오");

            string read = Console.ReadLine();

            Console.WriteLine("입력 받은 것 : " + read);//안좋은 방식이지만 사람이 쓰기엔 편하다.


            //비교

            //if( read == "1" )   

                //string 값 간의 비교는 연산이 너무 많아 진다. 

                //숫자라고 한다면 int는 값비교가 한번에 된다.

                //어지간해선 string간의 비교는 하지 말자.

            

            //들어온 숫자 string을 int형으로 변환

            int readNum =  Int32.Parse(read);   

            //숫자가 아닌것에 대해 예외처리 안되어있다. 나중에 다시 알아 보자.

            //숫자가 아니면 터진다.나중에 다시 알아 보자.


            //C#은 기본적으로 Unicode이므로 특수문자에 제약이 없다.

            if(readNum == 1)

            {

                Console.WriteLine("● 1이 입력 되었습니다.");

            }

            else

            {

                Console.WriteLine("◐ 1이 아닙니다.");

            }

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

배열  (0) 2016.05.04
데이터 타입  (0) 2016.05.04
[잡담]C# 공부 첫날 소감  (0) 2016.05.03
정수, 실수 출력  (0) 2016.05.03
C# 첫 경험  (0) 2016.05.03

//잡담

대학생일 때 C, C++, Java는 기본적으로 많이 건드렸었고

주언어를 Java로 하여 JSP와 연동되는 

많은 서버계열 언어들과 프레임워크를 회사에서도 꽤 다루어 본데다가

작년 부터 게임 개발로 돌아서면서 C++쪽을 많이 하여 

슬슬 Java같은 언어의 사용법이 C++에 뭍혀 가고 있었는데....


그런데 이제 Unity 개발을 시작하려고

C#에 처음 입문을 하였는데

느낌이 마치... 고향에 돌아와 공기를 마시는 느낌(?) 같았다.


Java와 꽤 비슷하여 c++로만 다룬 몇개월의 늪에서 다시 회생한기분 이다.


개비지컬렉션, 클래스 생성방법, 포인터 없는 것 하며

사용법 대부분이 Java 비스무리하여 

C++보다 꽤 쉽다. 

훅훅 습득이 된다. 

예전부터 C++과 Java 2가지 언어를 알게 되면

나머지 모르는 언어도 쉽게 접근 할 수 있다고 생각하고 있었지만

역시나 그렇다. 

쉽다. 간편하다. 새롭지만 낯설고 신기하다.


대부분 아는 내용이기 때문에

이 C#페이지에서는 

C++과 차이가 생기는 부분에 대한것을 

주로 포스팅을 하자.

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

배열  (0) 2016.05.04
데이터 타입  (0) 2016.05.04
string 처리 기본  (0) 2016.05.04
정수, 실수 출력  (0) 2016.05.03
C# 첫 경험  (0) 2016.05.03

정수, 실수 출력

공부/C#2016. 5. 3. 13:37


            int a = 1;

            int b = 2;

            Console.WriteLine(a + "+" + b + "=" + a + b); //1+2=12

            Console.WriteLine(a + "+" + b + "=" + (a + b)); //1+2=3 <= 괄호 안에 있는게 먼저 실행 됨. (우선순위를 높인다.)


            //칸수 맞추기

            int number = 255;

            Console.WriteLine("Number : {0}", number);  //십진수 기본

            Console.WriteLine("Number : {0,10:D5}", number); //10칸을 공간으로 잡는데 뒤에 5개는 숫자를 채워라(우측정렬)

            Console.WriteLine("Number : {0,10}", number); //10칸을 공간으로 잡아 숫자 우측 정렬

            Console.WriteLine("Number : {0,-5}|||||{0}", number); //좌측 정렬 5개의 공간 확보


            Console.WriteLine("Number : {0:X}", number);    // 16진수 출력

            Console.WriteLine("Number : {0:X4}", number);    // 16진수 4자리 출력하는데 빈 곳은 0으로 처리

            Console.WriteLine("Number : {0,4:X}||", number);    // 4자리를 확보하고 16진수 출력.우측정렬(||는 자리 표시 위한 것 의미 없음)

            Console.WriteLine("Number : {0,-4:X}||", number);    // 4자리를 확보하고 16진수 출력.좌측정렬(||는 자리 표시 위한 것 의미 없음)


            //실수형 변수 

            //float f = 1.0f; //float 형

            //float f2 = 1.0; //에러 발생 : c++에서는 뒤에 f를 안붙여 줘도 처리 됐지만, c#에서는 타입체크를 까다롭게 해줘야 한다.

            //double d = 1.0;    //double형


            float f = 1.12345f;

            double d = 2.12345;


            Console.WriteLine("float : {0}, double : {1}", f, d);

            Console.WriteLine("float : {0}", f.ToString("F3")); //소수점 3쨰자리까지 출력


            //반올림

            f = (float)Math.Round(f, 4);

            Console.WriteLine("반올림 : {0}", f);


            //올림 = 정수

            Console.WriteLine("올림 : {0}", Math.Ceiling(f));

            //버림 - 정수

            Console.WriteLine("버림 : {0}", Math.Floor(f));

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

배열  (0) 2016.05.04
데이터 타입  (0) 2016.05.04
string 처리 기본  (0) 2016.05.04
[잡담]C# 공부 첫날 소감  (0) 2016.05.03
C# 첫 경험  (0) 2016.05.03

C# 첫 경험

공부/C#2016. 5. 3. 12:53

//c++ 과 java의 혼종 같은 언어가 c#이다.


//########## 잡담 ##########

/*

c언어(절차지향)는 a언어, b언어 다음에 나온 언어라서 c언어이다.

c++ 은 c언어에서 발전(객체지향)

C#은 c++에서 더 발전(객체지향) 

++++을 2단으로

++

++

하면 큰 #이 된다더라......

*/

//######## 잡담 끝 #########


//뒤에 있는 namespace들을 사용하겠다.

//c, c++의 #include 와 비슷하다.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


//c++의 namespace 자체와는 같긴 같다.

//일종의 라이브러리 한 단위하고 보면 된다.

//클래스를 카테고리 별로 나눴다고 생각 하면 편하다.

namespace Day01

{

    class Program

    {

        //Program 에 있는 main()함수가 먼저 동작 한다.

        //static은 있어야 한다. Program을 생성하지 않았지만 main()은 동작 해야 하기 때문이다.

        //string[] args : 아규먼트, 콘솔 실행시 뒤의 인자값 넣어 string의 배열로 받아올 수 있다.

        static void Main(string[] args)

        {

            //c++과는 다르게 자동완성이 장난 아니게 잘되어 있다.


            Console.Write("Hello World\n"); //\n으로 개행 가능


            Console.WriteLine("Hello World2"); //한줄 단위로 쓸때.. 알아서 개행이 된다


            //string input = Console.ReadLine();  //입력을 받아서 input변수에 넣는다.

            //Console.WriteLine(input);           //input변수를 출력


            int i = 10;

            int j = i;

            j++;


            Console.WriteLine("i : {0} j : {1}", i, j); //i와 j 출력 방법

            //{, } 출력 

            Console.WriteLine("i : {{0}} j : {1}", i, j); //틀린방법 : {0} 자체가 문자로 인식 됨

            Console.WriteLine("i : {{{0}}} j : {1}", i, j); //되는방법 : {{가 {로 인식. }} 는 } 하나로 인식

            Console.WriteLine("i : {{{{0}}}} j : {1}", i, j); //틀린방법 : {{0}} 자체가 문자로 인식 됨

            Console.WriteLine("i : {{{{{0}}}}} j : {1}", i, j); //되는방법


            string line = string.Format("{0} {1}", i, j);   //포맷에 맞게 변수에 저장도 가능


            Console.WriteLine(line);


            //안좋은 방법

            Console.WriteLine("i : " + i + " j : " + j);    //스트링 까지 다 +로 이어질 수 있다. 

            //string 은 변경 불가능한 변수이다.(메모리 상)

            //string a = "1234";

            //a = "1234" + "abcd";

            //위처럼 가능하나 메모리 상태에서는 

            //처음 "1234"위 공간을 만들고

            //아래에서 +로 더할 떄 별도의 "1234"와 "abcd"를 메모리공간에 다시 만들고

            //"1234abcd"로 더한 메모리 공간을 다시 만들고 이 주소값을 변수 a가 가르키게 만들 뿐이다.

            //메모리 공간 낭비가 심하다.

            //나중에 개비지컬렉터가 삭제 해주긴 하지만 개비지컬렉터가 언제 지울지 모르는 것이다.


            int a = 1;

            int b = 2;

            Console.WriteLine(a + "+" + b + "=" + a + b); //1+2=12

            Console.WriteLine(a + "+" + b + "=" + (a + b)); //1+2=3 <= 괄호 안에 있는게 먼저 실행 됨. (우선순위를 높인다.)


            Console.ReadLine();

        }

    }

}



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

배열  (0) 2016.05.04
데이터 타입  (0) 2016.05.04
string 처리 기본  (0) 2016.05.04
[잡담]C# 공부 첫날 소감  (0) 2016.05.03
정수, 실수 출력  (0) 2016.05.03