[초보자를 위한 C# 200제]


[Day 24]


비트 연산자...

음..... 이 책의 예시들은 참 재미없고 와닿지 않는 느낌이다.


내가 아트 베이스에 수학을 싫어해서 그런지는 모르겠지만,

만드는 것들이 하나 같이 딱딱한 수학공식들임..

수학의 정석에 나오는 문제들을 코딩으로 구현하는 것 같음.


먼저 흥미를 북돋울수 있는 예제들을 경험하게 하고,

그 후에 실제 쓰일만한 상황에 수학 공식을 끼얹는게 좋은 접근 방식이 아닐까 생각해봄.


참 끈기와 의지가 필요한 책이구만.


보수란? (출처 : http://sessionk.tistory.com/126)


1의 보수는 0은 1로 1은 0으로 바꾸는 방식입니다. 

1의 보수 
0000 0100 -> 1111 1011 
이렇게 바꾸는 것이 1의 보수입니다. 

2의 보수는 1의 보수에 1을 더하는 것입니다. 
0000 0100 -> 1111 1011 +1 -> 1111 1100
위에 예제에서 2의 보수는 음수값을 가지고 있습니다.


1의 보수를 사용하다 보면 문제가 있습니다. 그 문제는 0이 2개가 생긴다는 것입니다.

+0 : 0000 0000
-0 : 1111 1111

0은 매우 중요한 숫자이므로 이러한 문제가 발생이 되면 안됩니다. 그래서 2의 보수를 만들게 되었습니다.

2의 보수는 1의 보수의 +1 입니다.

그래서 1111 1111은 0이 아니고 -1 입니다. 



일단 따라하긴 했지만, 그대로 베껴 치는게 뭔 의미가 있나 싶다 ㅡㅡ

아.. 짜증


알고 있는 내용이라도 연습삼아 차근차근 해보려했건만,

슬슬 짜증나서 스킵해야되나 고민중


[Day 25 - 30]

이미 알고 있는 switch, while 문으로 또 몇진법이 어쩌고 해서 Skip.


[Day 31]


ref 는 값에 의한 전달을 주소에 의한 전달이 되게 한다. ref 가 붙은 변수는 메서드 안에서 값을 변경하면 메서드 밖에 있는 원래의 값들도 변경된다.

메서드를 선언할 때와 호출할 때 모드 ref 키워드를 붙여야 한다.

ex ) Swap (ref m[j], ref m[j+1]);                    //호출

public static void Swap(ref int a, ref int b) {    //선언



get property - 저장된 값 보여주기  - a=m[i];

set property - 새로운 값 대입        - m[i] = 20;


foreach 출력이나 외부로 값을 보여주기(get property) 위해 for 대신 인덱스를 사용하지 않는 foreach 를 사용할 수 있다.

foreach(타입 변수 in 배열명) 의 형태를 사용한다. 줄을 맞추어 서있는 학생들을 부를 떄처럼 다음 학생이라는 말을 사용하는 것과 마찬가지로 배열 m에 있는 다음 int, 다음 int 로 배열 m 에 있는 모든 것을 출력할 수 있다. num 은 set property로 사용할 수 없다. 반복 변수에 대입하는 것은 불가능하다. 출력이나 저장된 값 보여주기용으로만 사용할 수 있다.


params 키워드는 변수의 개수에 관계 없이 사용할 수 있게 한다. DescSort(a,b), DescSort(a,b,c), DescSort(a,b,c,d) 와 같이 DescSort() 메서드의 아규먼트 개수가 2개, 3개, 4개가 필요할 때 오버로딩된 메서드가 3개가 필요하지만 params 를 사용하면 아규먼트의 개수에 관계 없이 사용할 수 있다.


out 키워드는 Argument 와 반대로 method 안에서 구한 값을 method 외부로 보낸다. return 을 사용할 수 없는 void 메서드를 이용하려면 out 키워드를 사용한다.

ex) private void countOfEnemy(int n, out int nums) {


string (문자열) 은 참조 타입이지만 기본 타입과 같은 특징을 갖는다. 참조 타입의 메서드를 가지면서 기본 타입처럼 값에 의한 전달을 한다.

특징1 - Immutable. s1 = "Good Morning." 일 때, s2 = s1.ToUpper(); 를 하면 s2는 "GOOD MORNING." 으로 변경된다. 그러나 s1은 그대로 "Good Morning." 이다 .s1을 s2에 대입하면 s2는 변경되지만 s1은 변경되지 않는다. 이를 이뮤터블이라고 하며, 기본 타입의 특징이기도 하다.

특징2 - 기본 타입과 문자열이 만나면 문자열이 된다.


Member method

string.ToUpper()            대문자로 바꾸기

string.ToLower()            소문자로 바꾸기

string.PadLeft(20, '-')      -을 왼쪽에 넣어서 20자 채우기

string.PadRight(20, '-')    -을 오른쪽에 넣어서 20자 채우기

string.Remove(5)           5번째부터 제거

string.Remove(5, 8)        5번째부터 8자 제거

string.Trim()                 양쪽 공백 제거

string.TrimeEnd()           오른쪽 공백 제거

string.TrimStart()           왼쪽 공백 제거

string.Replace('G', 'S')     'G' 를 'S' 로 바꾸기

string.Substring(5)        5번째 이후를 남기기

string.Substring(5, 8)      5번째부터 8자 남기기

string.Insert(2, "uu")        2번째에 "uu" 삽입하기

bool s1 = string.Contains("o")        "o"를 포함하고 있나?

int s1 = string.IndexOf("o")    왼쪽부터 첫번쨰 "o"의 위치 (없다면 -1)

int s1 = string.LastIndexOf("r") 마지막 "r" 이 존재하는 위치

int s1 = string.Length            문자열의 길이


char[] cc == {''}

string[] s1 = string.Trim().Split(cc);    공백 (" ") 을 기준으로 string을 분리 (먼저 Trim() 으로 공백을 제거한다)


chat[] c = string.Trim().ToCharArray();  문자열을 문자 타입의 배열로 만든다 (먼저 공백을 제거한다)


string ss = new string(c)        문자타입의 배열을 문자열로 바꾼다.


string.Concat(params object[] obj)     여러개의 파라미터를 붙임


string cc = "&";

string.Join(cc, keyval);            문자열 배열을 서로 붙일 때 분리자를 이용하여 붙임

'Study > Programming' 카테고리의 다른 글

[C# 200제] Day - 5  (0) 2018.01.04
[C# 200제] Day - 4  (0) 2018.01.03
[C# 200제] Day - 3  (2) 2018.01.02
[C# 200제] Day - 2  (0) 2018.01.01
[C# 200제] Day - 1  (0) 2017.12.31
  1. digitz 2018.01.02 15:52

    어차피 캐나다 오실꺼니까 기왕이면 영문서로 공부하시는 게 적응하시기 편하시긴 할 거에요. ㅎㅎ.
    보수가 필요한 개념이긴 합니다만 입문자용에 꼭 필요한지는 의문이긴 하네요. C#을 배우기로 하신데는 아마 Unity와의 접점때문이겠지만 개념 파악하는데에는 조금 어렵긴 할 거에요.
    C#은 객체지향프로그래밍 언어라 그 개념을 파악하는데 꽤 오랜 시간이 걸리는 편인데요 (저의 경우에도 학부 1년을 거의 이 개념을 이해하는데만..) 특히 class가 뭔지 왜 class가 필요한지를 깨닫기 위해서는 이론과 실전 공부를 열심히 병행해야 합니다. 이 객체지향형 언어는 지하철 빠른길 찾는 프로그램을 만들면서 어느정도 숙련자의 길로 접어들 수 있어요.
    그래서 언어에 익숙치 않으시다면 Flash의 Actionscript나 Web의 Javascript부터 시작하는 쪽을 추천드리긴 합니다만, 정공으로 처음부터 C# 배우는 것도 끈기만 있다면 괜찮은 선택일 겁니다. 화이팅입니다!

    • Woodorl 2018.01.03 09:16 신고

      조언 감사합니다. 아무래도 아직 영어가 많이 취약하다보니 영문 자료를 보니 완전히 이해하기가 쉽지 않더라구요. ㅠㅠ
      그래서 국문으로 구입했는데, 이게 또 같은 개념도 어떨때는 한글로, 어떨때는 영어로 말해놔서 더 헷갈리네요ㅋㅋ 아이고

      당장의 목표는 Unity + C# 으로 간단한 게임을 만드는건데, 나중에는 Shader language나 OpenGL도 공부해보려구요. 아마 일이년으론 어림도 없겠죠. ㅎㅎ

      일단 한동안은 Artist로서의 아트감도 발전시켜야하니 그냥 도닦는 수험생 심정으로 살려구요. ㅋㅋ

+ Recent posts