336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

현재 저는 엠베이의 웹 디자인을 맞게되어 당분간 강의를 쉬겠습니다

죄송합니다!! ㅜㅜ

'안내사항' 카테고리의 다른 글

안녕하세요~ 사이클론 입니다!  (0) 2016.02.25
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
대단하네요 우리나라도 이런 열풍이 돌았으면 좋겠습니다.


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이전 강의에서 int 자료형을 간략하게나마 설명한 바가 있습니다. 이번 강의에서는 그 자료형들에 대해서 좀 더 구체적으로 파고 들고자 합니다.


1. C 언어에서 사용가능한 자료형

C 언어에서 사용가능한 자료형은 여러가지가 있지만 이들은 각각의 다른 특성을 지니고 있어 때에 맞게 활용하는것이 효율적입니다. 이 자료형 들은 서로 크기가 다를 수도 있으며, 실수를 나타내던지 정수를 나타내던지 문자를 나타내는등 다양한 종류가 있습니다.


(그림 2-4-1)

우선 우리는 자료형의 정수형과 실수형에 대해 알아볼까 합니다. 우선 다음의 표를 참조하도록 하겠습니다.

자료형

크기

기본형

정수형

정수형

int

4 byte

__int8(비표준)

1 byte

__int16(비표준)

2 byte

__int32(비표준)

4 byte

__int64(비표준)

8 byte

short int(short)

2 byte

long int(long)

4 byte

long long int
(long long)

8 byte

문자형

char

1 byte

실수형

float

(단정도)

4 byte

double

(배정도)

8 byte

long double

8 byte이상

본 자료형들은 컴파일러마다 다를 수 있습니다. 왜냐하면 ANSI 표준에 따르면 char은 최소 1 byte, short와 int는 최소 2 byte, long은 최소 4 byte라고 명시되어있지 정확한 크기를 명시하지는 않았기 때문입니다. 따라서 프로그래밍 작업 이전에 먼저 sizeof 연산자를 이용해 자료형의 크기를 확인하는것이 좋습니다.

다음은 sizeof 연산자의 사용 예제입니다.

컴파일 결과 :

(그림 2-4-2)

이처럼 sizeof는 자료형의 크기를 byte 단위로 출력해주는 연산자입니다.

추가적으로 자료형에는 기본형인 나열형과 무치형, 파생형인 배열, 포인터, 구조체, 공용체가 있는데 이는 지금 설명하기엔 너무 이르므로 일단은 뒤로 넘기도록 하겠습니다.


2. unsigned

이전 강의에서 자료형의 제일 처음으로 오는 비트는 부호를 나타낸다 라고 설명한 바가 있었습니다. 덕분에 음수를 표현할 수 도 있겠지만 음수를 사용하지 않고 양수만 사용하는 환경에서는 그리 좋은 용도는 아닐거라 생각합니다. 왜냐하면 나타낼 수 있는 크기가 한정되어 있기 때문입니다. 예를들어 음수를 사용하지 않는 환경에서 프로그래밍을 할 때 1 byte크기의 자료형에서는 8개의 bit가 사용되는데 그 중 1개는 부호를 나타내는 비트로 사용 되니 나머지 7비트로만 자료를 나타내므로 한 개의 비트가 손실이 됩니다. 하지만 unsigned를 사용하면 양수와 음수를 나타내지 않게끔 자료형을 사용할 수 있도록 해줍니다. 우선 다음의 예제를 보도록 하겠습니다.

이처럼 unsigned는 자료형의 앞에 오게 됩니다.

자료형

크기

표현되는 데이터 범위

int

4 byte

-2147483648~2147483647

__int8

1 byte

-128~127

__int16

2 byte

-32768~32767

__int32

4 byte

-2147483648~2147483647

__int64

8 byte

-9223372036854775808~9223372036854775807

short int

2 byte

-32768~32767

long int

4 byte

-2147483648~2147483647

long long int

8 byte

-9223372036854775808~9223372036854775807

char

1 byte

-128~127

unsigned int

4 byte

4294967295

unsigned __int8

1 byte

0~255

unsigned __int16

2 byte

0~65535

unsigned __int32

4 byte

4294967295

unsigned __int64

8 byte

0~18446744073709551615

unsigned short int

2 byte

0~65535

unsigned long int

4 byte

4294967295

unsigned long long int

8 byte

0~18446744073709551615

unsigned char

1 byte

0~256

이것도 역시 컴파일러에 따라 차이를 보일 수 있습니다. Dev-C++의 경우 4 byte 이상의 자료형에서는 unsigned가 되지 않습니다.

혹시 게임 메이플 스토리를 아십니까? 요즘에는 모르겠지만 옛날까지만 해도 메이플에서 최대로 보유할 수 있는 돈이 2,147,483,647원이였습니다. 이렇게 최대로 돈을 보유할 수 있는 양이 딱 떨어지게 10억 20억도 아니고 2,147,483,647원인 이유는 바로 int형 자료형을 사용하였기 때문입니다. 

우리는 이전에 아스키 코드에 대해서 배운적이 있습니다. 아스키 코드 표에서 65번은 대문자 A를 나타내고 있습니다. 이제 이를 char형 자료형을 이용하여 나타내 보도록 하겠습니다.

이를 컴파일 하면 컴파일 과정에서 컴파일러는 'A'의 아스키 코드 표를 참조하여 그 코드가 몇번인지 확인 후 변수 a에 저장하게 됩니다.

아스키 코드 표를 참조하면 A는 65로 저장되어 있으므로 변수 a의 값은 65가 됩니다.

(그림 2-4-3)

3. 서식문자

여기서 65를 출력하지 않고 문자 A를 출력하게 할 수는 없을까? 라는 의문점이 드실수도 있습니다. 우리는 서식문자로 %d만을 사용해 왔습니다. 하지만 %d 이외에도 많은 서식문자가 존재 합니다.

서식 문자

출력 형태

%c

단일 문자 출력

%d

10진수 정수 출력

%i

10진수 정수 출력

%f

10진수 실수 출력

%s

문자열 출력

%o

부호가 없는 8진수 정수 출력

%u

부호가 없는 10진수 정수 출력

%x

부호가 없는 16진수 정수 출력(소문자 사용)

%X

부호가 없는 16진수 정수 출력(대문자 사용)

%e, %E

e 또는 E 표기법에 의한 실수 출력

%g, %G

값의 크기에 따라서 %f, %e(%E) 둘 중 하나를 선택하여 출력

%p

포인터의 주소값 출력

%n

포인터의 주소값 출력

%%

% 출

우선 %c에 대하여 설명을 드리면 %d 대신에 %c를 사용하면 변수에 저장되어 있는 값으 번호를 아스키 코드표를 참조하여 그에 맞는 문자를 출력하게 됩니다.

이처럼 'A'나 65나 같으므로 위와 같이 코딩을 하여도 문제가 없습니다.

컴파일 결과 :

A A

(그림 2-4-4)

이렇게 %c는 문자가 단일로 나타나게 됩니다.

%i는 %d와 같으므로 사용 예시는 그냥 넘기도록 하겠습니다. 다음은 %o, %u, %x(%X)에 대한 예시입니다.

컴파일 결과 : 
41374
17148
42fc
42FC
다음은 %f 에 대한 예시 입니다.

컴파일 결과 :
3.141593
3.141593
여기서 double 또는 float형을 선언하고 그 값을 출력할때는 반드시 서식문자 %f를 사용하여야만 합니다. 또한 float형 자료형을 선언하고 그 값을 초기화 시킬때는 상수뒤에 f를 붙혀주어야 컴파일 에러가 발생하지 않습니다. (이는 컴파일러마다 다소 차이가 있습니다.) 
그리고 컴파일 결과를 보시면 아시겠지만 변수 a와 b는 서로 소수점 이하 6자리 까지 밖에 표시되지 않은것을 보실 수 있습니다. 왜 그렇게 표시되냐면 이는 정밀도의 차이 입니다. 이전에 단정도와 배정도에 대해서 간략하게 설명한 바가 있습니다. float은 단정도, double은 배정도로써 float은 소수점 이하 6자리의 정밀도를, double은 소수점 이하 15자리의 정밀도를 나타냅니다. 여기서 double자료형을 사용했음에도 불구하고 6자리까지 출력하지 못한 printf("%f", b);를 printf("%.15f", b); 와 같이 바꾸어주면 문제는 간단하게 해결됩니다. %.15f는 소수점 이하 15자리까지 출력하라 라는 뜻입니다.
다음은 %e(%E)와 %g에 대한 예시 입니다.

컴파일 결과 :

1.230000e-005

1.230000E-005

3.14159

e(E)에 의한 표기법은 주로 공학용 계산기나 아주 크거나 아주 작은수를 다룰때 주로 사용하는 표기법입니다. 간략하게 설명을 드리자면 이는 다음과 같습니다.

즉 컴파일 결과에서 나온 1.230000e-005은 1.23×10^-5 와 같은 뜻이며 e와 E는 소문자와 대문자의 차이일 뿐 서로 같은 뜻입니다.

그리고 %g는 그 수가 너무 작거나 너무 크다고 컴파일러가 판단할 때 e표기법을 쓸지 않쓸지를 결정하여 출력하게 됩니다.

서식문자 %%는 말 그대로 %를 출력하게 해줍니다. 그냥 %를 써버리면 컴파일러는 이를 서식문자로 이해하고 컴파일 에러가 발생하기 때문에 %%를 써주는 것 입니다. 

마지막으로 이 서식문자를 디자인 면에서 좀 더 보기 좋게 사용 하는 방법이 있습니다. %d나 %f처럼 %뒤에 숫자를 써주면 지정한 숫자만큼 필드 폭이 확보되어 오른쪽으로 정렬한채 출력을 하게 됩니다. 또한 +와 -를 이용하여 작성하면 +는 오른쪽정렬후 부호를 붙혀서 출력, -는 왼쪽으로 정렬하여 출력하게 됩니다.

컴파일 결과 : 

(그림 2-4-5)

여기서 알려드리지 않은 나머지 서식문자는 추후에 강의하도록 하겠습니다.

4. scanf 함수에서의 서식문자

printf 함수에서와 마찬가지로 서식문자는 scanf 함수에서도 사용할 수 있습니다. 정수를 입력받을 때는 %d를, 실수를 입력받을때는 %f등 printf 함수에서 원하는 값을 출력할때 처럼 원하는 값을 입력받을때도 마찬가지로 사용할 수 있습니다.

여기서도 마찬가지로 float형을 입력받을때는 반드시 서식문자 %f를 써줘야 하며 double형을 입력받을 때는 반드시 %le를 사용해야 합니다.


이상으로 2장 강의 내용을 마칩니다.
3장부터는 본격 C 프로그래밍에 관하여 강의할 예정입니다.

학습내용)우리는 여러 자료형에 대해서 배웠고 서식문자에 대해서 학습하였습니다.

+ Recent posts