[이상선의 C언어 5분 코딩강의] 2.3 변수와 자료형
이상선의 C언어 5분 강의
변수와 자료형 - 3
오늘은 음주 코딩 강의입니다.
간단히 집에서 음주를 한 뒤 적는 것이니 혹시 잘못된 부분이 있으면 댓글 부탁드려요.
원래 음주 한 뒤에 코딩이나 온라인 강의를 자주 합니다.
더욱 또렷해지고 그 순간만큼은 집중력이 좋아지는 것 같아서 즐깁니다.
다음날 되면 까먹은게 많아서 문제지.. 아무튼 금요일 밤. 심란한 기분을 뒤로하고 잠시 집중해볼까 합니다.
코드 작성만이 살길이다!
코드는 백번 이해하는 것보다 한 번 적어보는 것이 훌륭한 프로그래머가 되는 지름길이다.
만약 당신이 책을 이해만하고 덮어버리는 습관이 있다면, 그건은 상당히 잘못되었다. 고치는 것을 추천한다.
마지막까지 파이팅!
변수의 이용
#include <stdio.h>
int main(void)
{
int num1 = 50, num2 = 70;
int sum;
sum = num1 + num2;
printf("%d %d\n", num1, num2);
printf("%d", sum);
return 0;
}
오늘은 변수를 어떻게 이용하는지 살펴보자.
지난 시간에 변수를 선언하고 초기화하는 방법을 알아봤다.
변수라는 것을 다시 상기해보면 '변하는 수', '데이터를 담는 그릇' 두가지 다 맞는 표현이라고 설명했다.
그렇다면 이제부터 이 변수를 어떻게 가지고 놀 것인가 고민해보자.
위의 소스를 보면,
정수형 변수 num1 에 50을, num2에는 70이라는 값으로 각각 초기화하였다.
그리고 sum 이라는 이름을 가진 변수도 선언하였다.
우리는 대입 '=' 이라는 개념을 배웠기 때문에
num1 = 50, num2 = 70 이라는 수식이 낯설지 않을 것이다.
하지만 숫자 뿐만 아니라 변수끼리도 계산이 된다면 믿을 수 있는가?
바로 밑에 sum = num1 + num2; 를 보면 그 궁금증이 풀릴 것이다.
이 수식은!
num1 에 할당된 값 50과 + num2 에 할당된 값 70 이 더해져 sum이라는 변수에 저장되는 수식이다.
그러므로 sum이라는 변수에는 120이라는 데이터가 존재하게 된다.
어떤가 정수형 변수를 가지고 노는 방법은 생각보다 쉽지 않은가!
그렇다면 이번엔 부동소수점 형식, 즉 실수라는 친구 double에 대하여 학습해보자.
#include <stdio.h>
int main(void)
{
double num1 = 50.0, num2 = 70.0;
double sum;
sum = num1 + num2;
printf("%lf %lf\n", num1, num2);
printf("%lf", sum);
return 0;
}
일단 소스부터 보자! 어디서 많이 본 소스같은데..? 그렇다.
바로 위에서 본 소스와 매우 흡사하다. 다만, 다른점이 있다면 int형식이 아닌 double 형식을 써서 계산했다는 점이다.
int가 정수 형태의 자료형이라면 double은 소수점을 표현할 수 있는 실수 형태의 자료형이다.
자세한 이야기는 다시 정수형, 실수형 파트에서 언급하겠지만 일단 실수형의 기본은 double이라고 생각하면 편하다.
num1에는 50.0이라는 데이터를, num2에는 70.0이라는 데이터를 넣어 sum에다가 저장 후 출력하는 프로그램이다.
정답은 무엇이 나올까?
직접 Ctrl + F5 번을 눌러 확인해보길 바란다.
필자의 예상으로는 자신이 생각했던 수보다 뭔가 더 길게 출력될 것이다.
이상한 것이 아니니 너무 궁금하게 생각하지 말자.
그리고 일단 빠르게 넘어가자!
기본 자료형
C언어의 자료형에는
기본형, 유도형, 사용자정의형이 있다고 언급한 바 있다.
자! 그러면 기본이 되는 자료형을 다시 살펴보면
정수형, 부동소수형, 문자형, 무치형이 존재한다.
유도형에는 배열, 포인터, 함수등이 있다.
사용자정의형은 위의 2가지(기본형, 유도형)를 이용하여 프로그래머가 다시 만든 자료형을 의미하는데
여기에는 열거형, 구조체, 공용체가 있다.
무엇이 있다고 읽어보기에 큰 어려움은 없을 것이다. 하지만 사용해 보지 않으면 이 친구들이 무엇을 하는지 모른다.
누누히 언급하지만 코드는 백문의 불여일타! 직접 타이핑해서 알아보는것이 빠르다.
정수형 - int
int는 앞으로 자주 만나게 될 친구다.
int에게 인사하자!
"안녕?" (아재개그 = 30대인데..)
흠흠!.. 아무튼.. 그만큼 자주 보게 되는 자료형이다.
이 친구는 기본적인 10진수부터 8진수, 16진수의 정수를 다양하게 저장할 수 있다.
하지만, int 말고도 다른 정수형이 존재한다.
헉? 실화인가. 이제 int 한번 봤을 뿐인데..! 하지만 쫄 것 없다. 바로 이해가 되기 때문이다.
int 말고 나머지 정수 자료형은 short, long 이라는 녀석들이다.
영어 이해가 바로 되지 않는가!
short는 int 보다 짧은 정수 자료형
long은 int보다 긴 정수 자료형이다.
여기서 짧고 길다는 뜻은 해당 자료형의 크기를 말하는 것이다.
바로 밑 표에서 나오니 그때 다시 한번 보자!
하지만 더욱 중요하게 알아야 될 것이 있다.
바로 unsigned와 signed 키워드다.
일단 signed는 부호가 있는 키워드다.
우리가 계속 사용하고 있는 일반적인 int, long, short가 전부 부호가 있는 키워드로 사용된다.
그러나 unsigned는 조금 다르다. 이것은 무부호 키워드인데
무부호라는 것은 마이너스(-)가 계산되지 않고 0과 양수만을 처리하기 때문에
처리할 수 있는 범위가 signed와 다르다.
그리고 signed는 앞에 signed int 이런 형식으로 붙이지 않아도 사용이 가능한 반면
무부호 키워드 unsigned는 무조건 앞에 키워드를 붙여서 사용해야 된다.
unsigned int
이런 형식으로 말이다.
그럼 이어서 범위를 한 번 살펴볼까?
부호가 있는 정수와 무부호 정수의 범위를 살펴보면
무부호 정수는 마이너스 처리를 하지 않기 때문에 부호가 있는 정수보다 2배 더 양수를 넣을 수 있다.
일반적인 부호가 있는 정수의 크기는 최대 21억 4천만가량 숫자를 넣을 수 있지만,
이것보다 더 큰 양의 정수가 필요할 경우 앞에 unsigned int 붙이는 것을 잊지말자!
자 그러면
소스를 더 가지고 놀아볼까?
#include <stdio.h>
int main(void)
{
short sho_a = 32000;
int in_b = -2140000000;
unsigned short u_sho_a = 65000;
unsigned int u_in_b = 4280000000;
printf("%d %d\n", sho_a, in_b);
printf("%u %u\n", u_sho_a, u_in_b);
long long int lon_c = 30000000000;
printf("%lld\n", lon_c);
return 0;
}
필자는 과거에 이런 코드가 되게 재미없었다. 물론 지금도 마찬가지다.
하지만 자료형은 필요할 때 반드시 맞게 사용해야 되므로, 기본은 알고 가는 것이 좋다.
위 코드를 살펴보자.
우리가 배우지 않은 것은 밑에 long long int 밖에 없다.
long int는 일반적으로 4바이트 정수지만, long long int는 8바이트 정수로 표현할 수 있다.
잠시 비트 계산을 해보자면
= 1바이트는 8비트다.
= 8바이트는 64비트다.
그렇다면.. 2의 64승 -1.. 음.. 그렇다. 아마 다 사용할 일이 없을 것 같다.
922경까지 사용가능한다고 한다.
아무튼 42억 이상의 정수를 표현하고 싶을 때 long long int가 있다는 것도 알아두자.
오늘 강의는 여기까지!
다음 강의는 부동소수점부터 이어서 진행하겠다.
※ 강의를 몇일 주기로 올릴 수 있을지 모르겠지만,
C, JAVA, C#, DB, 안드로이드 등 많은 영역에 대하여 쉽게 풀어서 강의를 업로드 할 예정입니다.
많은 응원과 관심 부탁드립니다. 감사합니다.
Congratulations @lsszz210! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
Click here to view your Board of Honor
If you no longer want to receive notifications, reply to this comment with the word
STOP
Do not miss the last post from @steemitboard: