티스토리 뷰
이전 글
2021/01/24 - [코딩 공부] - C언어 기초 : 변수
이전 포스트에서 변수가 무엇인지 알아보았습니다.
이번에는 변수에서 사용하는 자료형에 대해 알아보겠습니다.
1. 자료형이 뭘까?
변수 공간에 담을 수 있는 자료의 형태를 정의하는 것.
a 라는 이름으로 만든 변수에 저장할 자료의 형태가 숫자인지 문자인지 컴퓨터에게 미리 알려주는 것입니다.
내가 미리 분류를 정해줄테니까 분류에 맞는 정보를 저장할 준비를 해라고 컴퓨터에게 알려주는 것이라고 생각하시면 됩니다.
왜냐면 진수 파트에서도 얘기했듯이 컴퓨터는 생각보다 똑똑하지 않아서 우리가 일일이 지정을 해줘야 거기에 맞춰서 행동하거든요.
2. 자료형의 종류
종류 | 표기법 | 표현범위 | 자료형 크기 |
정수 | int | 약 -21억 ~ 21억 –2,147,483,648 ~ 2,147,483,647 |
4 Byte |
long long int | 약 -900경 ~ 900경 –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
4 Byte | |
unsigned int | 약 0 ~ 42억 0 ~ 4,294,967,295 |
4 Byte | |
실수 (소숫점 수) | float | -3.4*10^38 ~ 3.4*10^38 (유효 범위 : 소수점 6자리) |
4 Byte |
double | -1.79*10^308 ~ 1.79*10^308 (유효 범위 : 소수점 15자리) |
8 Byte | |
문자 | char | 0 ~ 255 | 1 Byte |
자료형의 종류에는 이런 것들이 있는데 다 외우실 필요는 없고 int, float, char 정도만 알고 계시면 됩니다.
이것들 말고도 더 많은 종류가 있지만 많이 쓰는 것은 int, float, char 세 가지입니다.
만약 정수를 저장하는데 int의 표현 범위가 넘어간다면 long long int를 쓰거나 unsigned int를 쓰시면 됩니다.
float 또한 마찬가지입니다.
자료형을 저장할 때 정수와 소숫점 수, 문자를 따로 저장하기 때문에 변수에 정수를 저장할 땐 int, 소숫점이 들어가는 수를 저장할 땐 float, 문자를 저장할 땐 char를 쓴다고 알고 계시면 됩니다.
그러면 코드 블록(혹은 비주얼 스튜디오)에 위의 코드를 쓰고 F9(비주얼 스튜디오에선 Ctrl + F5)를 눌러 실행을 해 볼까요?
그러면 위와 같은 프로그램이 실행됩니다.
5번째 줄에서 age라는 이름을 가진 변수는 나이를 저장하는데 나이에는 소수점이 없고 모두 정수로 이루어져 있잖아요?
그래서 정수 자료형인 int를 사용하면 됩니다.
그 다음 6번째 줄에서 weight라는 변수와 height라는 변수는 몸무게와 키를 저장하는 변수인데 몸무게와 키는 보통 소숫점이 나오기 때문에 실수 자료형인 float을 사용했습니다.
소숫점을 표현하고 싶은데 int 자료형을 사용하면 소숫점이 표현되지 않습니다.
만약 위 사진처럼 쓰고 실행한다면 어떻게 될까요?
오잉 몸무게를 저장하려고 만든 변수에 weight에 분명히 55.4라고 적었는데 소수점 아래 부분은 다 날아가고 정수 부분인 55만 출력되었네요.
아까도 얘기했다시피 컴퓨터는 생각보다 똑똑하지 않기 때문에 변수를 만들 때 정해준 자료형대로만 저장된 수를 출력합니다.
weight 변수를 만들 때 정수 자료형인 int형으로 만들었기 때문에 컴퓨터는 소수점 아래는 다 날리고 정수 부분만 출력한 것이지요.
그래서 7번째 줄에서는 float을 선언하고 변수를 만들었더니 소수점 아래까지 잘 출력하는 모습을 볼 수 있습니다.
그런데 맨 처음에 썼을 때는 소수점 첫 번째와 두 번째 자리까지만 출력했는데 이번엔 좀 많이 출력하네요?
두 코드에서 달라진 부분이 무엇일까요?
차이는 바로 printf 함수에 서식문자를 쓸 때 소수점을 어디까지 출력할 것인지 지정해주었느냐 안 해주었느냐입니다.
첫 번째 코드에서 10번째 줄을 보시면 나의 키는 %.2f cm입니다라고 쓴 것을 보실 수 있습니다.
두 번째 코드에서 9번째 줄을 보시면 키 : %f라고만 썼구요.
이렇게 보시면 눈치채셨을지도 모르지만 printf 함수를 사용해 실수형 변수에 저장된 수를 출력할 때 %와 f 사이에 . 을 찍고 출력하고 싶은 소숫점 자리수만큼만 숫자를 적으면 그 자리만큼만 출력이 됩니다.
%.2f라고 쓰면 소숫점 둘째 자리까지만 출력이 되고
%.3f라고 쓰면 소숫점 셋째 자리까지만 출력이 됩니다.
그냥 %f라고 쓰면 소숫점 6자리까지 출력이 되는 것이구요.
물론 %.8f라고 쓰면 소숫점 8자리까지 출력됩니다.
근데 사실 소숫점 둘째 자리까지 많이 쓰지 세자리 이상은 잘 쓰지 않잖아요?
그러니까 float 자료형을 출력할 때는 %.2f로 많이 쓴다고 생각하시면 됩니다.
그리고 다시 한 번 첫번째 코드를 보시면 8번째 줄부터는 printf 함수를 쓴 다음 괄호 안에 큰 따옴표 ""를 쓰고 그 안에 문구를 적은 다음 콤마 , 를 쓰고 위에서 만들었던 변수명을 적은 것을 볼 수 있습니다.
맨 첫 포스트에서 printf("Hello, World!"); 라는 명령문을 써서 콘솔창에 Hello, World!를 출력해 보았었죠?
printf 함수를 쓸 때엔 콘솔창에 출력하고 싶은 문구는 큰 따옴표 "" 안에 씁니다.
그런데 그냥 문장만 출력하는 것이 아니고 변수에 저장된 숫자를 출력하고 싶을 수도 있잖아요?
그럴 땐 변수의 자료형에 맞는 서식문자를 큰 따옴표 안에 적습니다.
int형 변수를 출력할 때는 %d
float형 변수를 출력할 때는 %f
char형(문자를 저장하는 자료형) 변수를 출력할 때는 %c와 %s
그 다음 출력되는 문구의 줄을 바꾸고 싶으면 큰 따옴표가 끝나기 전에 \n을 적어줍니다.
그리고 큰 따옴표 안에 내가 출력하고 싶은 내용을 다 적었다면 큰 따옴표 뒤에 콤마 , 를 적은 다음 큰 따옴표 안에 쓴 서식문자에 대응시킬 변수 이름을 적어주면 됩니다.
만약 위 사진처럼 printf 함수의 큰 따옴표 안에 서식문자를 두 개 쓴다면 콤마 , 를 쓰고 각각 서식문자에 대응시킬 변수를 적어줘야 합니다.
그러면 이번엔 이렇게 코드를 적어봅시다.
문자형 변수char에 값을 저장할 때는 작은 따옴표 ' ' 를 써줘야 합니다.
실행하면 num은 101이 되고 ch는 B로 바뀌어서 출력됩니다.
이렇게 바뀐 이유는 우리가 그냥 출력하지 않고 중간에 바꿔주는 코드를 썼기 때문입니다.
맨 처음에 int형 num이라는 변수를 만들면서 100이라는 값을 넣어주었습니다.
char형 ch변수에는 대문자 A라는 값을 넣어주었고요.
그 다음 8번째 줄에서 num = num + 1이라는 명령문을 적었습니다.
보이는대로 num 변수에 저장된 값에 1을 더해라는 의미입니다. 그래서 num은 101이 되었습니다.
9번째 줄에서는 ch 변수에 대문자 B를 저장했습니다. 이렇게 쓰면 A 다음에 B가 차곡차곡 저장되는 것이 아니고 A는 사라지고 B가 대체되어 저장된다고 생각하시면 됩니다.
그렇기 때문에 코드의 마지막 부분에서 출력하면 각각 101과 B가 출력됩니다.
C언어는 메인 함수의 윗줄부터 순서대로 실행되거든요.
그럼 이번엔 이렇게 적어봅시다.
ret이라는 변수를 만들어서 정수형 변수와 문자형 변수를 더하라고 하네요?
결과는... 계산이 안 될 줄 알았는데 계산이 되었습니다.
계산이 된 이유는 컴퓨터는 문자도 숫자로 저장하기 때문입니다.
예전에 아스키코드를 잠깐 봤었죠?
A | B | C | D | E | F |
65 | 66 | 67 | 68 | 69 | 70 |
아스키코드에서 문자 부분만 일부 가져와보면 대문자 A부터는 숫자 65부터 대입됩니다.
그렇기 때문에 컴퓨터에게 A 는 65 와 같은 것이죠.
A == 65
그래서 숫자와 문자 연산이 가능합니다.
이제 코드를 다시 보시면 이해가 가실 것입니다.
ret = 5 + A 가 아닌
ret = 5 + 65가 되는 것이죠.
그래서 10번째 줄 코드를 통해 70이라는 숫자가 출력되었습니다.
위의 아스키코드표를 다시 보시면 숫자 70에는 대문자 F가 대입되어 있습니다.
그렇기 때문에 11번째 줄에서 ret변수를 문자로 출력하니까 F가 출력되었습니다.
이건 많이 쓰는 부분은 아니기 때문에 이런 것도 가능하다 정도로 알고 넘어가시면 됩니다.
이번 포스트에서는 각각 자료형에 값을 저장하고 그 값을 출력할 때 적절한 서식문자를 사용해야 한다는 것을 알고 넘어가시면 됩니다.
그럼 다음 포스트에선 암시적 형변환과 명시적 형변환에 대해 알아보겠습니다.
다음에 만나요!
'코딩 공부 > C 언어' 카테고리의 다른 글
C 언어 기초 : scanf 로 원하는 데이터 입력 받기 (0) | 2021.02.07 |
---|---|
C언어 기초 : 암시적 형변환과 명시적 형변환 (0) | 2021.02.06 |
C언어 기초 : 변수 (0) | 2021.01.24 |
C 언어 기초 : 2진수, 8진수, 16진수 등등... 진법 (0) | 2021.01.17 |
C언어 기초 : 서식 문자(제어 문자) (0) | 2020.12.20 |
- Total
- Today
- Yesterday
- C언어기초
- 백준
- 영어공부
- dp
- 아이패드
- 해커랭크
- 프로그래밍
- 깊이우선탐색
- hackerrank
- 기초
- 코딩공부
- 컴퓨터사이언스
- 캐나다
- 프로그래머스
- 컴퓨터
- 알고리즘
- 다이나믹프로그래밍
- 그리디
- 너비우선탐색
- c언어
- BFS
- 애플
- 캐나다생활
- 하드웨어
- DFS
- greedy
- 스위프트플레이그라운드
- 문제풀이
- c++
- 컴퓨터공부
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |