004.C 변수와 자료형
오늘은 변수에 대해서 포스팅을 해보려고 합니다.
변수에 대한 개념을 알기 이전에 자료형에 대해서 먼저 알고 가면 좋을 것 같아서 자료형에 대해서 먼저 설명드린 이후에 변수에 대한 이야기 해보도록 하겠습니다.
이전 포스팅에서는 서식 문자를 통해서 데이터를 입출력할 때 서식을 지정해준다고 말씀드렸습니다.
그 때의 제가 만든 표를 보시면 서식 문자 옆에 출력대상 (자료형)이라 써뒀습니다.
제가 같이 써둔 이유는 출력 대상, 즉 데이터의 자료형에 따라서 서식문자를 대응되게 사용해줘야 하기 때문입니다.
그렇다면 이제 자료형이 뭔지에 대해서 알아야 겠죠?
자료형이라는 것은 말 그대로 자료의 형태를 말합니다.
10진수 정수는 int라는 자료형이고 10진 부동소수점은 float이고, 문자는 char이라는 정도는 숙지하고 계셔야 합니다. 여기서 int, float, char는 각각 interger, float, character라는 의미로 정수, 부동소수점, 문자 자료형을 뜻합니다.
기본적으로 자료형은 크게 보면 정수형, 실수형으로 나눠집니다.
데이터가 정수로 이루어져 있으면 정수형 데이터이고,
정수가 아닌 실수로 이루어진 데이터는 실수형 데이터라고 합니다.
한 가지 의아하실 수 있는 점이 있는데 문자형이 왜 정수형에 포함되는지에 대한 부분입니다.
이 부분에 대해서는 아스키 코드에 대해서 알고 계셔야 합니다.
아스키 코드는 영문자, 숫자, 기호 등을 2진수에 대응해서 만든 7비트 부호 체계입니다.
(1Byte 중 7비트는 부호를 변환에 사용, 1비트는 오류 검출에 사용한다.)
그렇기 때문에 자료형이 문자형인 'Char' 또한 정수로 데이터를 표현하기 때문에 정수형이라고 부르는 것입니다.
이진법 | 팔진법 | 십진법 | 십육진법 | 부호 | 설명 | 한국어 설명 |
000 0000 | 0 | 0 | 0 | NUL | Null Character | 널 문자 |
000 0001 | 1 | 1 | 1 | SOH | Start of Header | 헤더 시작 |
000 0010 | 2 | 2 | 2 | STX | Start of Text | 본문 시작, 헤더 종료 |
000 0011 | 3 | 3 | 3 | ETX | End of Text | 본문 종료 |
000 0100 | 4 | 4 | 4 | EOT | End of Transmission | 전송 종료, 데이터 링크 초기화 |
000 0101 | 5 | 5 | 5 | ENQ | Enquiry | 응답 요구 |
000 0110 | 6 | 6 | 6 | ACK | Acknowledgment | 긍정응답 |
000 0111 | 7 | 7 | 7 | BEL | Bell | 경고음 |
000 1000 | 10 | 8 | 8 | BS | Backspace | 백스페이스 |
000 1001 | 11 | 9 | 9 | HT | Horizontal Tab | 수평 탭 |
000 1010 | 12 | 10 | 0A | LF | Line feed | 개행 |
000 1011 | 13 | 11 | 0B | VT | Vertical Tab | 수직 탭 |
000 1100 | 14 | 12 | 0C | FF | Form feed | 다음 페이지 |
000 1101 | 15 | 13 | 0D | CR | Carriage return | 복귀 |
000 1110 | 16 | 14 | 0E | SO | Shift Out | 확장문자 시작 |
000 1111 | 17 | 15 | 0F | SI | Shift In | 확장문자 종료 |
001 0000 | 20 | 16 | 10 | DLE | Data Link Escape | 전송 제어 확장 |
001 0001 | 21 | 17 | 11 | DC1 | Device Control 1 | 장치 제어 1 |
001 0010 | 22 | 18 | 12 | DC2 | Device Control 2 | 장치 제어 2 |
001 0011 | 23 | 19 | 13 | DC3 | Device Control 3 | 장치 제어 3 |
001 0100 | 24 | 20 | 14 | DC4 | Device Control 4 | 장치 제어 4 |
001 0101 | 25 | 21 | 15 | NAK | Negative Acknowledgement | 부정응답 |
001 0110 | 26 | 22 | 16 | SYN | Synchronous idle | 동기 |
001 0111 | 27 | 23 | 17 | ETB | End of Transmission Block | 전송블록 종료 |
001 1000 | 30 | 24 | 18 | CAN | Cancel | 무시 |
001 1001 | 31 | 25 | 19 | EM | End of Medium | 매체 종료 |
001 1010 | 32 | 26 | 1A | SUB | Substitute | 치환 |
001 1011 | 33 | 27 | 1B | ESC | Escape | 제어기능 추가 |
001 1100 | 34 | 28 | 1C | FS | File Separator | 파일경계 할당 |
001 1101 | 35 | 29 | 1D | GS | Group Separator | 레코드 그룹경계 할당 |
001 1110 | 36 | 30 | 1E | RS | Record Separator | 레코드 경계 할당 |
001 1111 | 37 | 31 | 1F | US | Unit Separator | 장치 경계 할당 |
010 0000 | 40 | 32 | 20 | ␠ | ||
010 0001 | 41 | 33 | 21 | ! | ||
010 0010 | 42 | 34 | 22 | " | ||
010 0011 | 43 | 35 | 23 | # | ||
010 0100 | 44 | 36 | 24 | $ | ||
010 0101 | 45 | 37 | 25 | % | ||
010 0110 | 46 | 38 | 26 | & | ||
010 0111 | 47 | 39 | 27 | ' | ||
010 1000 | 50 | 40 | 28 | ( | ||
010 1001 | 51 | 41 | 29 | ) | ||
010 1010 | 52 | 42 | 2A | * | ||
010 1011 | 53 | 43 | 2B | + | ||
010 1100 | 54 | 44 | 2C | , | ||
010 1101 | 55 | 45 | 2D | - | ||
010 1110 | 56 | 46 | 2E | . | ||
010 1111 | 57 | 47 | 2F | / | ||
011 0000 | 60 | 48 | 30 | 0 | ||
011 0001 | 61 | 49 | 31 | 1 | ||
011 0010 | 62 | 50 | 32 | 2 | ||
011 0011 | 63 | 51 | 33 | 3 | ||
011 0100 | 64 | 52 | 34 | 4 | ||
011 0101 | 65 | 53 | 35 | 5 | ||
011 0110 | 66 | 54 | 36 | 6 | ||
011 0111 | 67 | 55 | 37 | 7 | ||
011 1000 | 70 | 56 | 38 | 8 | ||
011 1001 | 71 | 57 | 39 | 9 | ||
011 1010 | 72 | 58 | 3A | : | ||
011 1011 | 73 | 59 | 3B | ; | ||
011 1100 | 74 | 60 | 3C | < | ||
011 1101 | 75 | 61 | 3D | = | ||
011 1110 | 76 | 62 | 3E | > | ||
011 1111 | 77 | 63 | 3F | ? | ||
100 0000 | 100 | 64 | 40 | @ | ||
100 0001 | 101 | 65 | 41 | A | ||
100 0010 | 102 | 66 | 42 | B | ||
100 0011 | 103 | 67 | 43 | C | ||
100 0100 | 104 | 68 | 44 | D | ||
100 0101 | 105 | 69 | 45 | E | ||
100 0110 | 106 | 70 | 46 | F | ||
100 0111 | 107 | 71 | 47 | G | ||
100 1000 | 110 | 72 | 48 | H | ||
100 1001 | 111 | 73 | 49 | I | ||
100 1010 | 112 | 74 | 4A | J | ||
100 1011 | 113 | 75 | 4B | K | ||
100 1100 | 114 | 76 | 4C | L | ||
100 1101 | 115 | 77 | 4D | M | ||
100 1110 | 116 | 78 | 4E | N | ||
100 1111 | 117 | 79 | 4F | O | ||
101 0000 | 120 | 80 | 50 | P | ||
101 0001 | 121 | 81 | 51 | Q | ||
101 0010 | 122 | 82 | 52 | R | ||
101 0011 | 123 | 83 | 53 | S | ||
101 0100 | 124 | 84 | 54 | T | ||
101 0101 | 125 | 85 | 55 | U | ||
101 0110 | 126 | 86 | 56 | V | ||
101 0111 | 127 | 87 | 57 | W | ||
101 1000 | 130 | 88 | 58 | X | ||
101 1001 | 131 | 89 | 59 | Y | ||
101 1010 | 132 | 90 | 5A | Z | ||
101 1011 | 133 | 91 | 5B | [ | ||
101 1100 | 134 | 92 | 5C | \ | ||
101 1101 | 135 | 93 | 5D | ] | ||
101 1110 | 136 | 94 | 5E | ^ | ||
101 1111 | 137 | 95 | 5F | _ | ||
110 0000 | 140 | 96 | 60 | ` | ||
110 0001 | 141 | 97 | 61 | a | ||
110 0010 | 142 | 98 | 62 | b | ||
110 0011 | 143 | 99 | 63 | c | ||
110 0100 | 144 | 100 | 64 | d | ||
110 0101 | 145 | 101 | 65 | e | ||
110 0110 | 146 | 102 | 66 | f | ||
110 0111 | 147 | 103 | 67 | g | ||
110 1000 | 150 | 104 | 68 | h | ||
110 1001 | 151 | 105 | 69 | i | ||
110 1010 | 152 | 106 | 6A | j | ||
110 1011 | 153 | 107 | 6B | k | ||
110 1100 | 154 | 108 | 6C | l | ||
110 1101 | 155 | 109 | 6D | m | ||
110 1110 | 156 | 110 | 6E | n | ||
110 1111 | 157 | 111 | 6F | o | ||
111 0000 | 160 | 112 | 70 | p | ||
111 0001 | 161 | 113 | 71 | q | ||
111 0010 | 162 | 114 | 72 | r | ||
111 0011 | 163 | 115 | 73 | s | ||
111 0100 | 164 | 116 | 74 | t | ||
111 0101 | 165 | 117 | 75 | u | ||
111 0110 | 166 | 118 | 76 | v | ||
111 0111 | 167 | 119 | 77 | w | ||
111 1000 | 170 | 120 | 78 | x | ||
111 1001 | 171 | 121 | 79 | y | ||
111 1010 | 172 | 122 | 7A | z | ||
111 1011 | 173 | 123 | 7B | { | ||
111 1100 | 174 | 124 | 7C | | | ||
111 1101 | 175 | 125 | 7D | } | ||
111 1110 | 176 | 126 | 7E | ~
|
||
111 1111 | 177 | 127 | 7F | DEL | Delete | 삭제 |
비트와 바이트에 대한 개념을 잘 모른다면 다음 강의를 참고하시면 좋습니다
-> 비트코인? 비트토렌트? 왜 이름에 비트가 들어갈까?
변수
변수 = "변하는 수"이다
변수는 변하는 수입니다.
정해진 수인 정수(constant)와는 반대의 개념이죠.
수학적인 개념과 연관지어 생각하면 미지수와 비슷한 놈이라 보면 됩니다.
<변수 선언>
변수를 사용하기 위해서는 우선 선언을 해야합니다.
int x;
자료형 + 변수명
자료형과 변수명을 써주는 것으로 변수 선언을 할 수 있습니다.
선언을 한 뒤에는 x라는 변수는 int형인 데이터를 저장할 수 있는 공간을 가지게 된 것입니다.
쉽게 설명드리자면 변수 선언이라는 것은 선언한 자료형의 데이터를 담을 수 있는 그릇을 생성하는 작업입니다.
만약 int형 변수를 두 개 생성하고 싶으면 다음과 같이 선언하면 됩니다.
int x, int y; 또는 int x, y;
대입
위에서는 자료형을 설정하고 변수명을 지정해주는 것을 통해서 변수를 만들어봤습니다.
그렇다면 그 이후에 데이터를 넣는 과정은 어떻게 되는지 알려드리겠습니다.
변수는 데이터를 널 수 있는 공간이라고 했습니다.
이 공간에 데이터를 넣는 방법은 간단합니다.
변수명 = 데이터;
이렇게만 하시면 변수명에 해당하는 공간에 데이터가 들어가게 됩니다.
제대로 들어갔는지 어떻게 확인하냐구요? 그건 이전 강의에서도 계속 사용했던 printf라는 함수를 이용해서 출력해보면 쉽게 확인할 수 있습니다.
x = 15;를 통해서 변수 x에 15를 대입한 이후
printf함수를 통해서 제대로 출력되는 것을 확인할 수 있습니다.
+추가 실험
int형 변수 두 개 선언 후 각각 정수형과 문자형 대입이 가능한가?
두 개 변수를 선언하기 위해서 int x, y;를 사용했습니다.
같은 자료형인 경우 이렇게 간단히 표현하는 것이 편리합니다.
세 개고 네 개고 늘려나가도 선언하기 편하거든요 ㅎㅎ
사실 문자는 자료형이 int가 아니기 때문에 int변수에 대입했을 때 문제가 생길 수 있다고 생각이 들 수 있습니다.
하지만 실제로 실행해본 결과 전혀 문제가 없음을 알 수 있습니다.
그 이유는 char형인 문자 또한 정수형 데이터이기 때문입니다.
문자 'A'를 int형 변수에 대입하면 아스키 코드에 대응하는 10진수인 65로 저장이 되고, 그 이후 서식문자 %d로 출력할 때는 반대 과정을 거쳐 65가 'A'로 바꾸어 나오게 되는 것입니다.
'KAITE.til > C Language' 카테고리의 다른 글
006.C 연산자와 오퍼랜드 (0) | 2018.08.22 |
---|---|
005.C 입력과 출력 함수 (scanf, printf, puts 정리) (0) | 2018.08.21 |
003.C 서식문자, 특수문자에 대해 알아보자. (0) | 2018.08.19 |
002.C 소스 파일 구성 요소 (0) | 2018.08.17 |
001.C 프로그래밍을 위한 준비 (0) | 2018.08.17 |
댓글
이 글 공유하기
다른 글
-
006.C 연산자와 오퍼랜드
006.C 연산자와 오퍼랜드
2018.08.22 -
005.C 입력과 출력 함수 (scanf, printf, puts 정리)
005.C 입력과 출력 함수 (scanf, printf, puts 정리)
2018.08.21 -
003.C 서식문자, 특수문자에 대해 알아보자.
003.C 서식문자, 특수문자에 대해 알아보자.
2018.08.19 -
002.C 소스 파일 구성 요소
002.C 소스 파일 구성 요소
2018.08.17