▩ 자료형의 종류
- 하드웨어의 제한된 CPU Resource와 Memory 때문에 데이터 타입을 정확하게 지정을 해야 메모
리와 프로세서의 낭비를 줄일 수 있습니다.
1. 자료형의 종류
- 기본형-문자형 크기 기억되는 값의 범위
. char 1 Byte -128 ~ 127
※ 바이트 분리의 원리
0000 0000 ---> 0
0000 0001 ---> 1
~
~
0111 1111 ---> 127
OS는 지정된 데이터크기의 첫비트가 0이면 양수, 1이면 음수로 처리합니다.
1000 0000 ---> -128 첫비트가 1임으로 음수로 처리됩니다.
1000 0001 ---> -127
1000 0010 ---> -126
1000 0011 ---> -125
~
~
1111 1111 ---> -1
0000 0000 ---> 0
. unsigned char 1 Byte 0 ~ 255
- 기본형-정수형 크기 기억되는 값의 범위
. short 2 Byte -32768 ~ 32767
. unsigned short 2 Byte 0 ~ 65535
. int 2,4 Byte -32768 ~ +32767, -2147483648 ~ 2147483647
. unsigned int 2,4 Byte 0 ~ 65535, 0 ~ 4294967295
. long 4 Byte -2147483648 ~ 2147483647
. unsigned long 4 Byte 0 ~ 4294967295
- 기본형-실수형 크기 기억되는 값의 범위
. float 4 Byte 3.4e-38 ~ 3.4e38
. double 8 Byte 1.7e-308 ~ 1.7e308
. long double 10 Byte 3.4e-4932 ~ 3.4e4932
- 기본형-나열형
. enum enum{sero, one, two, three, four} a, b
- 기본형-무치형
. void
- 합성형-배열형
. int a[5]
- 포인터형 int *ptr
- 구조체형 struct
- 공용체형 union
2. 최대 최소값의 연산
컴퓨터 사람
============================
01111111 11111111 = 32767
+ 1
-------------------
10000000 00000000 = -32768
컴퓨터 사람
============================
10000000 00000000 = -32768
- 1
-------------------
01111111 11111111 = 32767
>>>>> 관련 예제
#include <stdio.h>
#include <conio.h>
void main() {
char k; //-128 ~ +127
k=127; printf("k=%d", k); //127
printf("\n");
//127+1: const int
k=127+1; printf("k=%d", k); //-128
printf("\n");
//-128 + (255-128) = -1, 11111111
k=255; printf("k=%d", k); //-1
printf("\n");
//11111111 + 1 = 00000000
k=256; printf("k=%d", k); //0
}
>>>>> sizeof()함수의 사용
#include <stdio.h>
void main() {
char c;
int i;
long l;
unsigned int ui;
unsigned long ul;
float f;
double d;
printf("c형의 크기는 %d바이트입니다.\n", sizeof(c));
printf("int형의 크기는 %d바이트입니다.\n", sizeof(i));
printf("long형의 크기는 %d바이트입니다.\n", sizeof(l));
printf("unsigned int형의 크기는 %d바이트입니다.\n", sizeof(ui));
printf("unsigned long형의 크기는 %d바이트입니다.\n", sizeof(ul));
printf("float형의 크기는 %d바이트입니다.\n", sizeof(f));
printf("double형의 크기는 %d바이트입니다.\n", sizeof(d));
printf("\n상수의 데이터사이즈\n");
printf("a문자의 크기 %d입니다.\n", sizeof('a')); //1
printf("b문자의 크기 %d입니다.\n", sizeof('b')); //1
//'a', 'b', '\0'
printf("ab문자의 크기 %d입니다.\n", sizeof("ab"));//3
printf("abcd의 크기 %d입니다.\n", sizeof("abcd"));//5
printf("10의 크기 %d입니다.\n", sizeof(10)); //4
printf("10.5의 크기 %d입니다.\n", sizeof(10.5)); //8
printf("10.5의 크기 %d입니다.\n", sizeof(10.5f)); //4
}
3. %d의 출력(#은 공백을 의미)
- 123일경우
%d: 123
%7d: ####123
%7d: ###1234
%7d: ##12345
4. %f의 출력
- %10.3f 처럼 사용
- 소수 자릿수 지정시 자동 반올림
- 전체 자리수가 많으면 왼쪽 부분이 공백으로 채워짐
- 데이터가 123.456일경우의 출력결과
%7.3f : 123.456
%8.3f : #123.456
%8.4f : 123.4560
%8.2f : ##123.46 <-- 자리올림 발생
%2.1f : 123.5 <-- 전체자리수 보다작은 자리수는 사용하지 말것
%.1f : 123.5
%8.0f : 123 <-- 정수만 나옴
>>>>> 실수형의 출력
#include <stdio.h>
void main() {
float f=256.124;
float g=256.0;
float h=256;
printf("%f\n", f);
printf("%7.3f\n", f);
printf("%f\n", g); //소수이하 무조건 6자리가 출력됨
printf("%f\n", h);
}
>>>>> 소수자리가 6자리가 넘는 경우의 출력
- float형의 경우 소수이하 5자리까지만 정확도가 유지됩니다.
#include <stdio.h>
#include <conio.h>
void main() {
float k=120.12345678;
double dk=120.12345678;
printf("값은: %12.6f\n", k); //120.123459
printf("값은: %12.7f\n", k); //120.1234589
printf("값은: %12.8f\n", k); //120.12345886
printf("\n");
printf("값은: %12.6f\n", dk);//120.123457
printf("값은: %12.7f\n", dk);//120.1234568
printf("값은: %12.8f\n", dk);//120.12345678
getch();
}
>>>>> 데이터의 역순으로 출력
- 숫자는 정렬이 오른쪽 기준입니다.
- 문자는 왼쪽 정렬입니다.
#include <stdio.h>
#include <conio.h>
void main() {
float f=256.124;
float g=256.0;
float h=256;
printf("%-f\n", f);
printf("%-10.3f\n", f);
printf("%-10.3f\n", g);
printf("%10.3f\n", h);
getch();
}
5. %e의 출력
- 정수 한자리만 남기고 전부 소수화 시킨다.
>>>>> 지수 형태의 출력
#include <stdio.h>
void main() {
float f=256.124;
float g=256.0;
float h=256;
printf("%e\n", f);
printf("%e\n", g);
printf("%e\n", h);
}
6. %c: 문자의 출력
>>>>> 아스키코드의 출력
#include <stdio.h>
void main() {
char c;
printf("임의의 문자를 입력하세요 : ");
scanf("%c", &c);
printf("입력한 문자 : %c\n", c);
printf("아스키 코드 : %d\n", c);
}
>>>>> 문자형식의 연산
#include <stdio.h>
void main() {
char c='c';
printf("원래 문자는 %c입니다.\n", c);
printf("%c의 다음 문자는 %c입니다.\n", c, c+1);
printf("%c의 이전 문자는 %c입니다.\n", c, c-1);
printf("%c의 대문자는 %c입니다.\n", c, c-32);
}
7. %s: 문자열의 입/출력
>>>>> 문자열의 입력
#include <stdio.h>
void main() {
char name[30], depart[30];
printf("이름을 입력하세요 : ");
scanf("%s", name);
printf("학과를 입력하세요 : ");
scanf("%s", depart);
printf("당신의 이름은 %s입니다.\n", name);
printf("당신의 학과는 %s입니다.", depart);
}
>>>>> 문자열 입출력
#include <stdio.h>
void main() {
char frt[30];
int dan, num;
printf("품목을 입력하세요. ");
scanf("%s", frt);
printf("판매단가를 입력하세요. ");
scanf("%d", &dan);
printf("판매수량을 입력하세요. ");
scanf("%d", &num);
printf("\n");
printf(" ** 품목별 판매 현황 **\n");
printf("=============================\n");
printf("품목\t단가\t수량\t금액\n");
printf("-----------------------------\n");
printf("%s\t%d\t%d\t%d\n", frt, dan, num, dan*num);
printf("-----------------------------\n");
}