-
C# 자료형, 16진수, 용어(교육 5일차)C# 2020. 5. 23. 19:55
문자형 자료형
자료형 크기 의미 범위 char 2byte 유니코드에 기반한 한 글자 U+0000 ~ U+FFFF string char의 모음 추가로 string 타입은 "" 사이에서 char를 여러 개 사용해서 표현하는데 변수를 초기화하지 않는다면 기본적으로
Null(16진수:0000) 이 들어있다. 또한 string a="abc"라는 문자열이 있다고 가정할 때 a, b, c 각 글자 하나마다 유니코드를 사용하므로 크기는 2byte씩이고 마지막에 Null이 들어있다 따라서 a 변수의 크기는 8byte이다.
C#은 2byte의 유니코드를 사용한다. ASCII코드의 앞부분은 그대로 유니코드에 들어있다. 위의 표에서 U+0000 ~ U+FFFF에서 16진수 이야기를 해야 하는데, 16진수를 사용하는 이유는 2비트를 사용하는 경우 사람의 눈으로 볼 때 너무 길다는 것이다.
2진수 8진수 10진수 16진수 111 7 7 7 1000 10 8 8 1001 11 9 9 1010 12 10 A 1011 13 11 B 1100 14 12 C 1101 15 13 D 1110 16 14 E 1111 17 15 F 1 0000 20 16 10 위의 표에서 볼 수 있듯이 16진수가 가장 많은 수를 가장 적은 표현법으로 표현할 수 있다. 이때, 8bit를 1byte라고 부르듯이 4bit를 1 nibble이라고 부르는데 4비트를 16진수에서 한자리로 표현할 수 있기 때문에, 보통 표기법을 16진수를 쓴다.
설명하기에 앞서 \는 역슬래시를 의미한다. \뒤에 문자가 오는 것을 익스케이프 시퀀스라고 한다. 여기서 익스케이프 시퀀스는 문자가 아닌 명령어처럼 실행된다. 위의 예제 코드에서 빨간 박스는 \t는 tab키를 의미하고, \n은 줄 바꿈을 의미한다. 결과창에서 보이듯이 출력을 전부 WriteLine이 아닌 Write로 적었음에도 ch1의 tab의 결과가 보인 다음에 T가 출력되었고, 다음으로 줄 바꿈이 출력된 다음에 o가 출력되었다.
다음 파란 박스는 유니코드상의 특수문자 ▶를 출력해보기 위함인데 해당 폰트가 설정되어 있지 않기 때문에 ? 이 출력된다. \자체를 출력하고 싶을 때는 \\로 출력을 하면 \한 글자만 출력이 된다.
초록색 박스에서는 "Hello World"를 출력하는 여러 가지 방법이 있는데 " 자체를 출력하고 싶을 때는 앞 뒤로 \를 붙여줌으로써, 출력이 가능하고, 익스케이프 시퀀스를 무시하고 문자 그대로 출력하는 방법은 제일 앞에 @를 붙여주면 된다. 그리고 변수와 문자열을 연속해서 출력하고 싶다면 변수와 문자열 사이에 +를 붙여주면 원하는 방식으로 출력이 가능하다.
Boolean 자료형
Boolean 자료형은 참과 거짓에 대한 자료형이다. 논리 자료형으로 1(참) 0(거짓)으로 표현한다. 다음 자료형을 출력하게 되면 결과 창에는 True와 False로 출력된다.
자료형 키워드 크기 기본값 표현 범위 논리형 boolean 1bit false true or false (1 또는 0) 주로 관계 연산자와 논리 연산자의 참 거짓을 판단하는 용도로 사용하는데
6>8 - False
8>6 - True
8==7 - False
6>=4 - True
2>=2 - True로 표현된다.
위 예제의 bool 변수를 차례대로 출력했을 때, 각각의 결과에 맞게 참과 거짓이 판별되는 것을 알 수 있다. 결과창에는 True 또는 False로 표시되지만 결국 0과 1이라는 것을 잊지 말자.
형 변환
형 변환이란 대입 연산자(=) 왼쪽과 오른쪽 사이의 형 즉 타입이 다를 때 왼쪽의 변수에 맞게 오른쪽의 상수 또는 변수를 변환해주는 것을 말한다.
암시적 형 변환
컴파일러가 알아서 왼쪽의 변수에 맞춰서 오른쪽의 상수 또는 변수를 맞춰주는 것을 암시적 형 변환이라 한다.
명시적 형 변환
사용자 즉 프로그래머가 왼쪽의 변수에 맞춰서 오른쪽의 상수 또는 변수를 Casting(형 변환)을 사용해서 맞춰주는 것 을 명시적 형 변환이라 한다.
위 예제에서는 암시적 형 변환과 명시적 형 변환이 모두 이루어졌다. byte 타입의 n에 65의 상수를 넣어줬다. 이 65의 상수는 기본적으로 int형이다. 이러한 형 변환이 일어날 수 있는 이유는 int형의 65가 byte의 범위 0~255의 범위 내이기 때문에 아무 문제가 될 것이 없다고 컴파일러가 판단한 것이다. 그 밑의 char형의 c에 byte형의 65가 들어갈 수 있는 이유는 casting, (char) n를 통해 사용자가 컴파일러에게 문제 될 것이 없으니 그냥 대입하라는 명령을 줬기 때문이다. 따라서 유니코드 상에 대입되는 65는 대문자 A이므로 A가 출력된다.
다음에서는 40000이라는 결과가 출력돼야 함에도 -25536이 출력되는 이유는 short가 표현 가능한 수의 범위는 -32,768 ~ 32,767인데 그 값을 초과하는 40000의 값을 사용자가 캐스팅을 사용하여 강제로 대입했기 때문이다. 그렇다면 -25536이 나오는 이유를 알아보자.
int n 은 4byte이다. 따라서 2진수로 표현하면
0000 0000 0000 0000 1001 1100 0100 0000의 값이 입력된다. 하지만 short는 2byte이므로 앞의 2byte는 버린다.
1001 1100 0100 0000이 a에 들어갈 것이다. 2byte로 표현이 된다. 하지만 저번 게시글에 설명했듯이 ushort가 아닌 short는 부호를 포함한다. 따라서 2의 보수법으로 표현한다.
1001 1100 0100 0000
->0110 0011 1011 1111 <-여기에 1을 더한다.
---------------------------
0110 0011 1100 0000 -> 16진수로 표현해보자 = 63C0
10진수로 봤을 때 정확히 25,536이 나오는 것을 볼 수 있다. 2의 보수법이므로 앞에 -가 붙어서 위의 예제와 같이 -25,536 이 출력된 것이다.
변수(Variable)
사용자는 컴퓨터의 공간 즉 메모리를 이용하기를 원하고 컴퓨터는 메모리의 주소를 사용하여 사용자에게 인터페이스를 제공한다. 그러나 사용자가 메모리의 주소(숫자)를 외워서 프로그래밍 하기에는 너무 어렵다. 따라서 사용자는 메모리 공간의 주소를 사용할 때 이름을 사용하는데 이를 변수라고 한다.
Const(상수)
상수는 변하지 않는 변수, Constant 즉 변함없는 이란 뜻의 Const이다. 상수란 변수의 반대말로 변하지 않는 값을 나타낸다. 변수에서는 변수의 값을 줄 때마다 변하지만, 변수의 값을 고정할 수 있는 방법 또한 있다.
변수의 앞에 const를 붙이는 것이다.
const int a = 30; a에 30이란 값을 할당한다면
a=60; 위 줄에서 const를 사용했기 때문에 컴파일러가 에러를 낸다.
리터럴
변수의 값이 변하지 않는 데이터
식별자(Identifier)
식별자란 변수, 함수, 클래스의 이름을 지정하는 데 사용되는 이름을 말한다.
식별자 규칙
- 알파벳 대소문자, 한글(유니코드이므로), 숫자, 밑줄(_)을 조합하여 만든다.
- 숫자로 시작하면 안 된다.
- 최대 길이는 32자이다.
- 예약어는 식별자로 쓸 수 없다. 하지만 @를 붙이면 가능하다.
예약어 키워드
예약어 키워드란 이미 용도가 다 정해졌기 때문에 변수명으로 지정할 수 없는 문자를 의미한다.
지금까지 배웠던 예약어는
- 정수형 : byte sbyte short ushort int long ulong uint
- 실수형 : double float decimal
- 문자형 : char string
- 논리형 : bool
등이 있다. 만약 위 단어로 변수명을 지정하고 싶다면 앞에 @를 붙여주면 되지만 추천하고 싶지 않은 방법이다.
연산자
관계 연산자
== A와 B가 같으면 참, 그렇지 않으면 거짓 A == B != A와 B가 다르면 참, 그렇지 않으면 거짓 A != B > A가 B보다 크면 참, 그렇지 않으면 거짓 A > B < A가 B보다 작으면 참, 그렇지 않으면 거짓 A < B >= A가 B보다 크거나 같으면 참, 그렇지 않으면 거짓 A >= B <= A가 B보다 작거나 같으면 참, 그렇지 않으면 거짓 A <= B 산술 연산자
+ 더하기 A+B - 빼기 A-B * 곱하기 A*B / 나누기 A/B % 모듈러, 나머지 A%B ++ 1 증가 A++ -- 1 감소 A-- 단항 연산자
양수 : + 5 => 부호 연산자
음수 : - 5 => 부호 연산자
이항 연산자
value = 20 => 대입 연산자
위 예제에서는 변수에 값을 Console.ReadLine()를 사용해서 변수에 값을 콘솔 창에서 입력받도록 하는 역할을 한다. Console.ReadLine() 은 문자열로 입력받을 때 사용하고, 정수형으로 입력을 받고 싶을 때는 int.Parse(Console.ReadLine())을 사용해서 입력받는다. 산술 연산자를 사용해서 입력받은 값을 연산을 통해 덧셈 뺄셈 곱셈을 사용해서 출력해봤다.
변수의 값을 출력하는 방법으로 Console.WriteLine("{n}", a); 의 형식을 사용해서 n의 자리에 a변수의 값을 출력하는 방식을 사용한다. n은 0번부터 시작하고, a에는 변수의 이름을 적어주면 된다.
'C#' 카테고리의 다른 글
C# 객체지향, 구조체, 배열(교육8일차) (0) 2020.05.27 C# 반복문 (교육 7일차) (0) 2020.05.26 C# 자료형, 조건문, 연산자 (교육 6일차) (0) 2020.05.25 C# 자료형 (교육 4일차) (0) 2020.05.21 C# 개발환경 구축 (교육 3일차) (0) 2020.05.20