본문으로 바로가기
반응형

 지난 시간에는 C# 기본 자료형에 대한 것들과 그에 관한 기초지식을 공부했습니다.

 

 오늘은 진법과 기본 문법에 대해서 알아보겠습니다. 

 

1. 진법

 진법은 수를 셀 때, 자릿수가 올라가는 단위를 기준으로 하는 셈법의 총칭을 의미합니다. 현실에서 우리가 사용하는 10진법은 1부터 9까지의 숫자를 나타냅니다.

 

 컴퓨터가 사용하는 진법은 보통 2진법입니다. 하지만, 기계어가 0, 1로 표현되면 우리가 구별하기가 어렵기 때문에 8진법과 16진법으로 변환하여 쉽게 표현하는 방법을 알아야 합니다. 쉽게 표현하자면,

10진법  2진법     8진법      16진법

1         00            1               1

2         10            2               2

3         10            3               3

4         100           4               4

5         101           5               5

6         110           6               6

7         111           7                7

8         1000         8                8

9         1001        10               9 

10         .            11                A

11         .            12                B

12         .                                C

13                                          D

14                                          E

15                                          F

16                                         10

17                                         11

 

 이렇게 되는데, 8진법에서 9는 존재하지 않기에 바로 10이 되었고, 16진법에서 보통 10진법에 표현하는 게 불가능했기 때문에 문자를 쓴 것입니다.

 

 2진법은 전기의 ON/OFF로 구별할 수 있고, 01111111110000010같은 수들을 컴퓨터가 인식하여 작동되게 됩니다. 하지만, 저런 숫자들이 계속 나열되면 복잡하므로 16진법으로 표현하는 것입니다.

0111 1111 1000 0010

2진수들을 이렇게 4개로 쪼개 주고

7  0111

F  1111

8  1000

2  0010

묶음 하나씩 16진법으로 변환해주면

01111111110000010 => 7F82로 변환할 수 있는데, 2진수에서 16진수는 변환이 빠를뿐더러 16진수가 숫자 수도 더 간단하기 때문에 컴퓨터는 보통 16진수로 보여줍니다.

 

 

 

2. 기본 문법

 

 (1) 실수형 기본 타입

 저번 기본 자료형의 byte, int 같은 타입은 정수형 타입입니다. 그렇다면 실수에 관한 타입도 존재하는데 float, double, decimal입니다. 소수점이 있는 연산을 할 때는 일반적으로 double타입, 빠른 처리 속도가 필요하고 연산 값이 4byte 단정도의 실수로도 충분하다면 float을 사용할 수 있습니다. 

 실수형 타입은 정수형과는 달리 특별한 접미사가 사용될 수 있는 것이 특징이며, float 형식의 값은 숫자 값 다음에 f를 붙여야 하며, decimal의 경우에 소수점을 포함하는 경우 m을 붙여서 써야 합니다.

 

 

 

 (2) 문자형 기본 타입

 문자 및 문자열에 관련해서 C#에서는 char, string 두 가지 타입을 제공합니다.

 char는 표현할 수 있는 범위의 수를 보면 ushort와 비트상으로 16비트(0~0xFFFF)로 동일하지만, ushort는 수를 담기 위한 타입으로 정해져 있는 반면 char는 문자를 담기 위한 타입으로 약속되어있습니다. 

 char로 사칙연산을 하려는 경우 컴파일할 때 오류가 발생하게 됩니다. 이것은 문자와 문자를 더하거나 빼는 것이 논리적으로 적합하지 않기 때문인데, 이러한 차이 덕분에 정수를 담는 상황에서는 ushort, 문자를 담으려는 상황에서는 char를 쓰도록 구분할 수 있습니다.

 

위의 코드에서 작은따옴표와 큰따옴표를 사용했는데 작은 따옴표 '  '는 1글자를 표현할 때 사용되고, 큰 따옴표 "  " 는 NULL을 포함한 글자(or글자들)을 표현할때 사용됩니다.

 

 

 

 (3) 이스케이프 시퀀스

편집기에서 키보드를 입력할 수 없는 문자를 표현하기 위해 특별하게 사용하는 문법입니다. 역슬래시 \(한국은 원화로 표시됩니다)로 시작하는 특수 문자 표현입니다. 화면 출력은 Console.Write인데 Console.WriteLine는 '\n' 문자를 덧붙여서 출력하는 것과 같습니다.

\t 는 TAB(공백을 주는 효과), \n 는 엔터의 효과가 난다.

 

 

 (4) 불린(boolean)형 기본 타입

 C#에서 true/false만 담을 수 있는 자료형입니다.

false를 저장했을때, isNumeric변수가 false를 출력하는 모습

bool 자료형은 나중에 배울 if문이나 while 문 등에 평가식으로 사용되거나 사람의 성별과 같이 참/거짓에 해당하는 자료를 표현할 때 주로 사용됩니다.

 

 

 

(5) 형변환

 

 1) 암시적변환(Implicit conversion)

 공간의 효율을 위해 각 변수 타입을 크기에 맞게 써야 한다고 했지만, 1바이트의 byte타입이 2바이트의 short형에 대입된다면 전혀 문제가 없습니다. 왜냐하면 byte 데이터에는 0~255 범위의 수를 담을 수 있고, short 데이터에는 -32768~32767의 범위의 값을 담을 수 있기 때문입니다.

short타입에 byte타입에 대입되도 문제없는 모습이다.

 이처럼 범위가 작은 데이터 타입에서 큰 타입으로 대입될 때 컴파일러가 '암시적 변환'으로 간주해서 오류 없이 컴파일이 가능합니다. 하지만, 큰 값을 표현할 수 있는 데이터가 작은 타입으로 갈 때, 즉 byte의 범위를 넘어가는 수가 short에 저장 됐다고 가정할 때, byte로 대입할 수는 없습니다.

 

 

2) 명시적변환(Explicit conversion)

 2바이트인 ushort 형의 데이터가 동일한 2바이트인 char 형으로 대입된다면 C# 컴파일러는 형 변환을 할 수 없다는 에러와 함께 컴파일을 중단해버립니다.

 char 타입은 문자만을 담도록 약속돼있기 때문인데, 이럴 때 명시적 변환으로 괄호로 캐스팅을 해주면 오류 없이 컴파일할 수 있는 것을 확인할 수 있습니다.

캐스팅을통해 오류 없이 'A'가 출력되는 모습

 

 

 

 (6) 그 외

 1) 예약어 = 키워드 : C#에서 문법을 표현하기 위해 미리 예약된 단어(sbyte, byte, int, char 등)

 

 2) 식별자(identifier) : 프로그래머가 임의로 이름 지을 수 있는 단어(변수 타입 옆 이름을 말함)

 식별자는 규칙이 있는데, 

  1. 시작 문자는 숫자로 시작할 수 없고 반드시 문자여야 한다.

int 1n (X)     int n1(O)

  2. 특수 문자 중에 유일하게 언더바(_)만 시작 문자로 사용 가능

int _n = 5;

  3. 유니코드 범위의 문자가 허용되기 때문에 '한글' 식별자도 사용 가능함

int 변수 = 5

  4. 예약어를 변수 이름으로 설정할 수 없다. 굳이 하려면 @문자를 맨 앞에 붙여서 사용 가능

int int = 100 (X)      int @int = 100;

  5. 이스케이프 시퀀스로도 식별자를 사용할 수 있다.  -> 가능은 한데 쓰지 말자

 

 3) 리터럴 : 상수(Hello World, 5 , N, true 같은 것들)

 

 

이것들 외에 참 거짓이 나오는 관계연산자, 단항연산자, 2항연산자, 3항연사자 등을 배웠는데 다음시간에 자세히 설명해주신다고하시네요.

 

오늘은 기본 문법을 배워봤는데요, 본격적인 문법은 아마 다음 시간부터 본격적으로 시작할 것 같네요.... 더 힘내보겠습니다..

 

감사합니다.

반응형