이상선의 C언어 5분 강의
변수와 자료형 - 4
오늘은 음주 후 다음날 코딩 강의입니다.
더위에 지쳐 술을 좀 멀리하다가 요즘엔 바빠지고 약속도 많이 생겨 어제도 음주를..!!
그래도 열심히 살고 있다는 증거 아니겠습니까!
귀찮지만 생각보다 제 강의를 보는 분들이 많고 간혹 연락도 와서 질문도 주시고 해서
책임감이 생기더군요^^
많은 분들이 제 강의를 통해 꿈을 키우고 열심히 하셔서 좋은 곳에 취직하셨으면 하는 바램입니다.
오늘도 시작하겠습니다.
코드 작성만이 살길이다!
코드는 백번 이해하는 것보다 한 번 적어보는 것이 훌륭한 프로그래머가 되는 지름길이다.
만약 당신이 책을 이해만하고 덮어버리는 습관이 있다면, 그건은 상당히 잘못되었다. 고치는 것을 추천한다.
이번주도 잘 마무리하시길 바랍니다.^^
부동소수점 - double
부동소수 자료형은 실수형을 담기 위한 그릇이다.
즉, 실수를 위한 저장 공간을 사용한다.
부동소수형태는 3가지가 존재하는데 float, double, long double 이렇게 세 가지다.
여기서 float만 4바이트, 나머지는 둘다 8바이트 자료형이다.
백문의 불여일타! 바로 소스로 확인해볼까?
#include <stdio.h>
int main(void)
{
float a = 3.14;
double b = -3.141592;
long double c = 180000000.0;
printf("%f\n %f\n %f\n", a, b, c);
return 0;
}
소스는 크게 어렵지 않다!
float 형태 a와 double 형태의 b 그리고 마지막으로 long double 형태의 c를 선언하고 각각의 값을 넣어 초기화 하였다.
a,b,c 전부 실수로 선언하였기 때문에 정수를 넣는다고 해도 뒤에 소수점 자리가 붙어 실수로 처리된다.
ex) double a = 3; 이라고 선언하여도 결과는 3.000000 과 같다.
double과 long double은 둘다 8바이트. 즉, 64비트 자료형이기 때문에 float보다 훨씬 더 넓은 공간을 가지고 저장이 가능하다.
문자 자료형 - char
문자 자료형 char는 문자 저장 공간에 사용한다.
문자형 char는 크게 char, signed char, unsigned char 세 가지 종류가 있다.
문자형은 저장공간의 크기가 모두 1바이트다.
#include <stdio.h>
int main(void)
{
char a = 'a';
char b = 65;
printf("%c %c\n", a, b);
printf("%d %d\n", a, b);
return 0;
}
자! 소스를 살펴보자.
위 소스는 a, b에 각각 'a'라는 문자와 65 정수를 넣고 초기화하였다.
문자 자료형은 반드시 문자 1개(1바이트)만 저장이 가능하기 때문에 'ab'이런 식으로 저장할 수 없다.
그리고 반드시 앞 뒤에 작음 따옴표''를 넣어주어야 한다.
그렇다면 65 정수를 문자 자료형 b에 넣으면 어떻게 나올까?
그 전에 우리는 ASCII 코드라는 것을 알 필요가 있다.
ASCII 코드(이하 아스키코드)는 미국 ANSI에서 표준화한 정보교환용 7비트 부호체계이다.
https://namu.wiki/w/%EC%95%84%EC%8A%A4%ED%82%A4%20%EC%BD%94%EB%93%9C
출처 : 나무위키
위 표가 바로 아스키 코드를 나타낸 표다.
여기서 65를 찾아보면 대문자 'A' 문자라는 것을 확인할 수 있는데, 소스에서 char b = 65를 넣었기 때문에
printf에서 %c로 뽑아보면 대문자 A가 나오는 것을 확인할 수 있다.
반대로 %d는 정수 형태를 뽑아내는 것이기 때문에 65 숫자가 그대로 나온다.
신기하고 재미있지 않은가!
소문자 a도 아스키코드 표에서 어느 숫자에 포함되는지 찾아보자!
sizeof 연산자
sizeof 연산자는 c언어에서 제공하는 연산자라고 생각하면 된다.
우리가 지금까지 int, double, char 자료형태에 대하여 4바이트, 8바이트, 1바이트다 이렇게만 설명했는데
다양한 자료형이 과연 실제로 앞서 언급한 그 크기를 가지고 있는지 확인해보자.
#include <stdio.h>
int main(void)
{
printf("%d\n", sizeof(char)); //1
printf("%d\n", sizeof(short)); //2
printf("%d\n", sizeof(int)); //4
printf("%d\n", sizeof(long)); //4
printf("%d\n", sizeof(long long)); //8
printf("%d\n", sizeof(float)); //4
printf("%d\n", sizeof(double)); //8
printf("%d\n", sizeof(long double)); //8
return 0;
}
소스를 보면 printf 출력문에서 바로 sizeof 연산자를 사용하였다.
이렇게 char, short, int 등 자료 형태를 sizeof 연산자와 함께 %d로 출력하면 그 자료형에 해당하는 바이트가
정수형태로 계산되어 나온다.
옆에 주석은 그 결과값을 같이 기술한 것이니 저렇게 실제로 나오는지 직접 타이핑해보자!
어떤가? 실제로 필자가 설명한 바이트 크기대로 나오지 않는가?
프로그래밍은 신기한 연산자와 함수가 매우 많다! 우리가 c언어를 여행하며 다뤄야 될 친구들도
많이~~ 매우 많이 남아있다.
그러니 지치지말고 꾸준히 프로그래밍을 연습하자!
오늘 강의는 주말이라 여기까지!!
다음 강의는 오버플로우, 언더플로우부터 이어서 진행하겠다.
※ 강의를 몇일 주기로 올릴 수 있을지 모르겠지만,
C, JAVA, C#, DB, 안드로이드 등 많은 영역에 대하여 쉽게 풀어서 강의를 업로드 할 예정입니다.
많은 응원과 관심 부탁드립니다. 감사합니다.
짱짱맨 호출에 응답하여 보팅하였습니다.
짱짱맨은 저자응원 프로그램입니다. 더 많은 저자 분들에게 더 큰 혜택을 드리고자 스파임대 스폰서를 받고 있습니다. 스폰서 참여방법과 짱짱맨 프로그램에 관해서는 이 글을 읽어 주세요. 기업형 예비증인 북이오(@bukio)가 짱짱맨 프로그램을 운영하고 있습니다. 여러분의 증인 보팅은 큰 힘이 됩니다. Vote for @bukio