1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다. 1.2.1 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-1 연산범위이유 : 00000000 00000000 00000000 00000000의 32 bits 중 좌측첫 bit는부호를나타내며 1일때 (-), 0일때 (+) 를표시한다. 2) long int(4 bytes)( 단순히 long이라함 ). 연산범위 : int와동일. 3) short int(2 bytes)( 단순히 short라함 ) : (-2 15 ) ~ (2 15-1) 4) unsigned int( 부호없는 int) : 0 ~ (2 32-1) 5) unsigned long( 부호없는 long) : unsigned int와동일 6) unsigned short( 부호없는 short) : 0 ~ (2 16-1) 1.2.2 문자 (character) 문자는 1 byte 가할당되어그속에수를기록할수있다. 1) char(1byte) : (-2 7 ) ~ (2 7-1) 2) unsigned char( 부호없는 char) : 0 ~ (2 8-1) 1.2.3 실수 (float point) 1) float(4 bytes) 저장방법 : 예 ) 3.14159 = 0.314159( 가수 ) x 10 1 ( 지수 ) 0 00000000 00000000000000000000000 부호bit 지수 =8bits 가수 =23bits 2) double(8 bytes) 0 00000000000 00000000...00000000000 부호bit 지수 =11bits 가수 =52bits 이러한정의들은 2 bytes (16 bits) 컴퓨터가유행하던시절사용하던용어들이다. 오늘날은 4 bytes (32bits) 를기본으로하기때문에 short, long, float들은주로 int, double, char로단순화하여사용된다. sizeof() 함수속에자료형을넣어배정된메모리의크기를확인할수있다. 예제 ) sizeof() 함수로배정된메모리의크기조사
printf("char=%d\n", sizeof(char)); printf("unsigned char=%d\n", sizeof(unsigned char)); printf("int=%d\n", sizeof(int)); printf("unsigned int=%d\n", sizeof(unsigned int)); printf("float=%d\n", sizeof(float)); printf("double=%d\n\n", sizeof(double)); printf("short=%d\n", sizeof(short)); printf("unsigned short=%d\n", sizeof(unsigned short)); printf("long=%d\n", sizeof(long)); printf("unsigned long=%d\n", sizeof(unsigned long)); cout<<"char="<<sizeof(char)<<'\n'; cout<<"unsigned char="<<sizeof(unsigned char)<<'\n'; cout<<"int="<<sizeof(int)<<'\n'; cout<<"unsigned int="<<sizeof(unsigned int)<<'\n'; cout<<"float="<<sizeof(float)<<'\n'; cout<<"double="<<sizeof(double)<<"\n\n"; cout<<"short= "<<sizeof(short)<<'\n'; cout<<"unsigned short="<<sizeof(unsigned short)<<'\n'; cout<<"long="<<sizeof(long)<<'\n'; cout<<"unsigned long="<<sizeof(unsigned long)<<'\n'; 1.3 출력함수내문자 1.3.1 제어문자의역할 제어문자는프로그램의출력형식을결정하는역할을한다. 다음프로그램으로각각의제어문 자역할을알아본다. 예제 ) 제어문자의역할 printf("\\n 줄바꿈 \n"); printf("\\t 다음문장이한텝뒤에나타남 \n"); printf("\\b backspace\b\n");
printf("\\r carriage return-행의첫위치로이동 \n"); printf("\\f 용지바꿈 \n"); printf("\\ back slash\n"); printf("\" 따옴표표시 \n"); printf("\\0 NULL 문자-뒤부터동작안함 \n"); printf("\\a alarm(beep)\a\n"); cout<<"\\n 줄바꿈 \n"; cout<<"\\t 다음문장이한텝뒤에나타남 \n"; cout<<"\\b backspace\b\n"; cout<<"\\r carriage return-행의첫위치로이동 \n"; cout<<"\\f 용지바꿈 \n"; cout<<"\\ back slash\n"; cout<<"\" 따옴표표시 \n"; cout<<"\\0 NULL 문자-뒤부터동작안함 \n"; cout<<"\\a alarm(beep)\a\n"; 1.3.2 출력변환기호 1) 출력 format 다음프로그램은출력 format 의형태이다. 예제 ) 출력 format int a=2345; long b=34569; double c=31.42; char d='a'; char *e="hello"; printf("hello World\n"); // 문자열 (string) 출력 : Hello World printf("%d\n",a); // integer형출력 :2345 printf("%ld\n", b); // long형출력 :34569 printf("%f\n", c); // float형출력 :31.420000 printf("%lf\n", c); // double형출력 : 상동 printf("%e\n", c); // exponential형출력 : 3.142000e+001 printf("%c\n", d); // character 출력 : A printf("%x\n", d); // hexadecimal로출력 : 41 printf("%s\n", e); // 문자열출력 :hello
printf("%p\n\n", &a); // hex 로메모리주소출력 int f=0xb; // 수앞의 0x 는 hexa decimal 을표시한다. printf("f = %d\n", f); // decimal 로출력 : 11 printf("f = %o\n", f); // hex B 를 octo 13 으로출력 : 13 int a=2345; long b=34569; double c=31.42; char d='a'; char *e="hello"; cout<<"hello World\n"; // 문자열출력 : Hello World cout<<a<<'\n'; // integer형출력 :2345 cout<<b<<'\n'; // long형출력 :34569 cout<<c<<'\n'; // double 및 float형출력 :31.42 cout<<d<<'\n'; // character 출력 :A cout<<hex<<(int)d<<'\n'; // hexadecimal로출력 :41 cout<<e<<'\n'; // 문자열출력 cout<<&a<<"\n\n"; // hex로메모리주소출력 int f=0xb; // 수앞의 0x는 hexa decimal을표시한다. cout<<dec<<f<<'\n'; // decimal로출력 : 11 cout<<oct<<f<<'\n'; // hex B를 octo 13으로출력 : 13 cout.setf(ios::scientific); // 다음줄의수를 exponential로표기 cout<<12.3<<'\n'; 설명 : C의 printf() 는정수 (%d), 실수 (%lf), 문자 (%c) 및문자열 (%s) 의출력에대해각각의 format을갖고있다. 그러나 C++ 의 cout과 (<<) 연산자는정수나실수문자및문자열에대해다르게취급하는방식을스스로알고있기때문에이러한 format이없다. cout에문자열이전송되면이를텍스트로출력하고수가전송되면이를수로출력한다. 이것은앞으로배울 C++ 의주요특성중하나인연산자오버로딩 (operator overloading) 의한예이다. 2) 출력자리수 format 다음프로그램은출력자리수 format 이다. 예제 ) 출력자리수 format int a=2345; double b=31.42; char *c="good"; printf("%7d\n",a); // 우로부터좌측으로빈칸을포함하여 7자리 : 2345 printf("%3d\n",a); // 자리수보다모자라면무시 :2345 printf("%07d\n",a); // 2345 앞에 0을넣어 7글자를채움 :0002345
printf("%-7d\n",a); // 좌측으로부터우측으로 7자리출력 :2345 printf("%9.4f\n", b); // 소수점이하 4자리, 수를포함 9칸 : 31.4200 printf("%7s\n", c); // 문자포함 7칸출력 : good #include <iomanip.h> // setw() 를위한 header int a=2345; double b=31.42; char *c="good"; cout<<setw(7)<<a<<'\n'; // 빈칸을포함하여우로부터 7자출력 : 2345 cout<<setw(3)<<a<<'\n'; // 자리수보다모자라면무시 :2345 cout<<setprecision(4)<<b<<'\n'; // 소수점이하 4자리 cout<<setiosflags(ios::fixed)<<b<<'\n'; cout<<setiosflags(ios::showpoint)<<b<<'\n'; cout<<setw(7)<<c<<'\n'; 보다자세한내용은입출력 stream에서취급될것이다.