You are on page 1of 38

Review

1. ____________ 은 변수 앞에 원하는 자료형을 (int)var 와 같이 적어주


는 것이다 . 그러나 변수의 값이 변환되는 것은 아니다 .

2. 반면 , ____________ 은 필요할 때마다 자동적으로 수행된다 .


IT COOKBOOK

chapter 04.
데이터의 표현과 연산 (Ⅱ)

한빛미디어㈜ -2- ehanbit.net


IT COOKBOOK

한빛미디어㈜ -3- ehanbit.net


 정수의 다양한 표현법과 자료형 IT COOKBOOK

• 정수형 상수를 다른 진법으로 표현하는 방법

• 정수를 다른 진법으로 입출력하는 방법

• 여러 가지 정수형 자료형

한빛미디어㈜ -4- ehanbit.net


▶ 정수형 상수를 다른 진법으로 표현 IT COOKBOOK

• 정수형 상수는 10 진법 , 8 진법 , 16 진법으로 표현할 수 있다 .

• 8 진수와 16 진수로 표현할 때는 10 진수와의 구별을 위해서 각각


접두어 0 과 0x 를 붙인다 .

• 표현법만 다를 뿐 같은 값이다 .

printf(“10 진수 상수 12 : %d\n”, 12); 10 진수 상수 12 :


printf(“8 진수 상수 014 : %d\n”, 014); 12
printf(“16 진수 상수 0xc : %d\n”, 8 진수 상수 014 :
0xc); 12
16 진수 상수 0xc :
12
한빛미디어㈜ -5- ehanbit.net
▶ 정수를 다른 진법으로 출력 IT COOKBOOK

• 정수를 각 진법에 맞게 입출력 할 때는 적절한 변환문자열을 사용한다 .

출력 형태 10 진수 8 진수 16 진수

변환문자열 %d %o %x

의미 Decimal Octal heXa-decimal

• 같은 값 12 를 각 진법으로 출력하는 예

printf(“10 진수 12 를 10 진수로 출력 : %d\n”,


12);
printf(“10 진수 12 를 8 진수로 출력 : %o\n”,
12);
진수
printf(“1010 진수1212
를를1610 진수로
진수로 출력출력: %x\n”,
:
12); 12
10 진수 12 를 8 진수로 출력 : 14
10 진수 12 를 16 진수로 출력 : c

한빛미디어㈜ -6- ehanbit.net


▶ 진법에 맞게 접두어 붙여서 출력 IT COOKBOOK

• 변환문자열에 ‘ #’ 플래그 (flag) 를 사용하면 접두어를 붙여서 출력한다 .

printf(“10 진수 12 를 8 진수로 출력 :
%#o\n”, 12);
printf(“10 진수 12 를 16 진수로 출력 :
%#x\n”, 12);
10 진수 12 를 8 진수로 출력 :
014
10 진수 12 를 16 진수로 출력 :
0xc

한빛미디어㈜ -7- ehanbit.net


▶ 정수를 다른 진법으로 입력 IT COOKBOOK

• 키보드입력 14 를 각 진법으로 입력 받을 때 실제 입력되는 값

int val;

printf(“ 정수값을 입력하세요 : ”);


scanf(“%o”, &val); // 키보드로 입력되는 값을 8 진수로 해석한다
.
printf(“ 입력된 값을 10 진수로 출력하면 %d 입니다 .\n”, val);

정수값을 입력하세요 : 14 ( 엔터 )
입력된 값을 10 진수로 출력하면 12 입니다 .

한빛미디어㈜ -8- ehanbit.net


▶ 여러 가지 정수형 자료형 IT COOKBOOK

• 정수형 자료형에는 int 형 외에도 여러 가지가 있으며 , 크기는


컴파일러에 따라 차이가 있다 .

( 단위 : 바이트 )
컴파일러 운영체제 환경 char short int long

TC++3.0 도스 1 2 2 4
VC++6.0 윈도즈 1 2 4 4
gcc 유닉스 1 2 4 4

• 특별한 경우가 아니면 정수형 자료형으로 int 형을 사용한다 .


- int 형은 현재의 시스템에서 가장 빠르게 처리될 수 있도록 구현

되므로 int 형을 사용하는 것이 가장 좋다 .

한빛미디어㈜ -9- ehanbit.net


 정수값이 저장되는 방법 IT COOKBOOK

• 정수값의 비트 표현

• 정수형 변수에 저장되는 값의 범위

• 양수값만을 저장하는 정수형 변수

한빛미디어㈜ - 10 - ehanbit.net
▶ 정수값의 비트표현 IT COOKBOOK

• 정수값은 2 진수로 저장된다 .

• 2 진수 비트열에서 가장 왼쪽의 비트는 MSB(Most


Significant Bit, 가장 오른쪽의 비트는 LSB(Least
Significant Bit) 가 된다 .

한빛미디어㈜ - 11 - ehanbit.net
▶ 정수형 변수에 저장되는 값의 범위 IT COOKBOOK

• 자료형의 비트수에 따라 저장되는 값의 범위는 다음과 같다 .

• 각 정수형 자료형에 저장할 수 있는 값의 범위


(VC++6.0 기준 )
자료형 크기 계산식 저장 값의 범위

char 1 바이트 (8 비트 ) 28 - 1 0 ~ 255


short 2 바이트 (16 비트 ) 216 - 1 0 ~ 65535
int, long 4 바이트 (32 비트 ) 232 - 1 0 ~ 4294967295

한빛미디어㈜ - 12 - ehanbit.net
▶ 정수형 변수를 양수값 전용으로 사용하자 . IT COOKBOOK

• 양수값 전용으로 사용할 때는 unsigned 예약어를 사용한다 .

• unsigned 변수로 입출력할 때는 %u 변환문자열을 사용한


다.
unsigned char uch; // uch 는 unsigned 형으로 선언

printf(“unsigned char 형에 최대값을 입력하세요 : ”);


scanf(“%u”, &uch); // %u 변환문자열을 사용하여 입력한다 .
printf(“unsigned char 형에 저장된 값은 : %u\n”, uch); // %u
로 출력

unsigned char 형에 최대값을 입력하세요 : : 255 ( 엔


터)
unsigned char 형에 저장된 값은 : 255

한빛미디어㈜ - 13 - ehanbit.net
▶ 정수값은 모듈러 (modular) 연산에 의해 저장된다 . IT COOKBOOK

• 자료형의 최대값을 넘는 값을 입력하면 범위를 넘어선 나머지 값


만 저장된다 .

unsigned char 형에 최대값을 입력하세요 : : 257 ( 엔


터)
unsigned char 형에 저장된 값은 : 1

한빛미디어㈜ - 14 - ehanbit.net
 음수까지 포함한 정수형 IT COOKBOOK

• 음수값은 2 의 보수로 저장한다 .

• 음수값을 포함한 저장 범위

한빛미디어㈜ - 15 - ehanbit.net
▶ 음수값은 2 의 보수로 저장한다 . IT COOKBOOK

• 4 비트 크기의 자료형에서 양수와 음수로 사용되는 비트표현

한빛미디어㈜ - 16 - ehanbit.net
▶ 음수값을 포함한 저장 범위 IT COOKBOOK

• 자료형의 비트수에 따라 저장되는 값의 범위는 다음과 같다 .

• 각 정수형 자료형에 저장할 수 있는 값의 범위 ( 음수값 포함 )


(VC++6.0 기준 )
자료형 크기 계산식 저장 값의 범위
char 1 바이트 (8 비트 ) -27 ~ 27-1 -128 ~ 127
short 2 바이트 (16 비트 ) -215 ~ 215 -1 -32768 ~32767

int, long 4 바이트 (32 비트 ) -231 ~ 231 -1 -2147483648 ~


2147483647
• 정수형 자료형은 기본적으로 signed 로 선언된다 .

한빛미디어㈜ - 17 - ehanbit.net
▶ signed 자료형에서 modular 연산 IT COOKBOOK

• 양의 최대값 다음의 수는 음의 최대값이 된다 .

char ch; // 기본적으로 signed 형으로 선언된다 .

printf(“char 형에 최대값을 입력하세요 : ”);


scanf(“%d”, &ch); // %d 변환문자열을 사용하여 입력한다 .
printf(“char 형에 저장된 값은 : %d\n”, ch); // %d 로 출력

char 형에 최대값을 입력하세요 : 128 ( 엔터 )


char 형에 저장된 값은 : -128 // 음수값이 출력된다 !!

한빛미디어㈜ - 18 - ehanbit.net
 실수값의 표현과 자료형 IT COOKBOOK

• 실수형 상수의 표현법

• 지수 형태의 입출력

• 여러 가지 실수형 자료형

• 실수값의 비트표현과 저장범위 , 유효숫자

한빛미디어㈜ - 19 - ehanbit.net
▶ 실수형 상수의 지수 표현법 IT COOKBOOK

• 아주 크거나 아주 작은 실수값은 지수형태로 표현한다 .

• 지수형태로 표현된 실수형 상수의 예


0.5e01 -2.002e3 14142e-4 0.0625E+02 +.5e-9

• 소수점 이하 출력 자리수를 조절하는 방법

printf(“0.5e01 -> %.0lf\n”, 0.5e01); 0.5e01 -> 5


+.5e-9 ->
printf(“+.5e-9 -> %.10lf\n”, +.5e-9);
0.0000000005

한빛미디어㈜ - 20 - ehanbit.net
▶ 지수형태의 입출력 방법 IT COOKBOOK

• 실수값을 지수 형태로 입출력할 때는 %le 변환문자열을 사용한다 .

printf(“ 소수점형 상수 10002.0 을 지수 형태로 출력 : %le\n”,


10002.0);
printf(“ 지수형 상수 0.00625e3 을 지수 형태로 출력 : %le\n”,
소수점형 상수 10002.0 을 지수 형태로 출력 : 1.000200e+004
0.00625e3);
지수형 상수 0.00625e3 을 지수 형태로 출력 : 6.250000e+000

• 지수형태로 입력 받아서 소수점 형태로 출력하는 예


double db;
printf(“ 실수값을 지수 형태로 입력하세요 : ”);
scanf(“%le”, &db);
printf(“ 입력된 값을 소수점 형태로 출력하면 : %lf\n”, db);

실수값을 지수 형태로 입력하세요 : 314e-2 ( 엔터 )


입력된 값을 소수점 형태로 출력하면 : 3.140000

한빛미디어㈜ - 21 - ehanbit.net
▶ 여러 가지 실수형 자료형 IT COOKBOOK

• 실수형 자료형에는 double 형 외에도 여러 가지가 있으며 ,


크기는 컴파일러에 따라 차이가 있다 .
( 단위 : 바이트 )
컴파일러 운영체제 환경 float double long double

TC++3.0 도스 4 8 10
VC++6.0 윈도즈 4 8 8
gcc 유닉스 4 8 16

• 특별한 경우가 아니면 실수형 자료형으로 double 형을 사용


한다 .
- float 형은 오차가 발생할 가능성이 많으므로 적당한 크기와 정밀
도를
가지는 double 형을 주로 사용하는 것이 좋다 .

한빛미디어㈜ - 22 - ehanbit.net
▶ 실수값의 비트 표현 IT COOKBOOK

• 실수값은 IEEE754 표준에 따라 저장된다 .


- 한정된 크기의 기억공간에 최대한 효율적으로 실수값을 저장하기 위해서는
특별한 약속에 따라 저장한다 .

• double 형 변수 (8 바이트 ) 에 실수값을 저장하는 예


- 가장 왼쪽의 비트는 부호비트이며 양수는 0, 음수는 1 을 저장한다 .
- 부호비트 다음부터 11 비트는 지수값을 저장한다 .
- 나머지 52 비트에 소수값을 저장한다 .

• 실수형 자료형은 signed 와 unsigned 를 사용하지 않는다


.
- 실수형 자료형은 항상 signed 형태로 사용되는 것이다 .

한빛미디어㈜ - 23 - ehanbit.net
▶ 저장 범위와 유효숫자 IT COOKBOOK

• double 형 변수의 저장값의 범위는 대략 다음과 같다 .

- 최대값은 지수 부분과 소수 부분이 모두 가장 큰 값을 가질 때이며 최소값은


부호가 반대인 경우이다 .

• double 형 값의 유효숫자는 15 자리이다 .

- 실수값은 값의 크기와는 별도로 정확한 값을 표현하는 데에는 한계가 있다

. double exact;
exact = 0.1234567890123456789; // 유효숫자가 많아서 정밀한

printf(“ 유효숫자가 많은 값 : %.20lf\n”, exact);
유효숫자가 많은 값 : 0.12345678901234568000 // 뒷부분에 오차
가 생김

한빛미디어㈜ - 24 - ehanbit.net
 문자 데이터의 저장 IT COOKBOOK

• 문자 데이터는 아스키코드값으로 저장된다 .


- 아스키코드 (ASCII code) 값은 컴퓨터에서 사용되는 각 문자들을 어떤 비트열로
표현할 것인지에 대한 약속이다 .
- 128 개의 문자에 대해 각각 1 바이트 (8 비트 ) 의 비트열로 표현하도록 약속한다 .
- 아스키코드값의 몇 가지 예 ( 괄호는 각각 16 진수와 10 진수 )

• 문자상수는 아스키코드값에 해당하는 정수형 상수와 같다 .


- 문자상수를 연산하여 대문자를 소문자로 바꾸는 예

한빛미디어㈜ - 25 - ehanbit.net
 자료형의 크기 확인 IT COOKBOOK

• 자료형의 크기를 확인할 때는 sizeof 연산자를 사용한다 .


- sizeof 연산자는 피연산자의 데이터 크기를 바이트 단위로 계산해준다 .

• 다양한 데이터의 크기를 확인하는데 사용할 수 있다 .


printf(“%d 바이트 \n”, sizeof(‘V’)); 1 바이트 // 문자 상수의 크기
printf(“%d 바이트 \n”, sizeof(35)); 4 바이트 // 정수형 상수의 크기
printf(“%d 바이트 \n”, sizeof(1.65)); 8 바이트 // 실수형 상수의 크기
printf(“%d 바이트 \n”, sizeof(1.65f)); 4 바이트 // 실수형 상수의 크기
printf(“%d 바이트 \n”, sizeof(“abc”)); 4 바이트 // 문자열 상수의 크기
printf(“%d 바이트 \n”, sizeof(“K”)); 2 바이트 // 문자열 상수의 크기
printf(“%d 바이트 \n”, sizeof(10/4)); 4 바이트 // 수식의 결과값의 크기
printf(“%d 바이트 \n”, sizeof(10/4.0));8 바이트 // 수식의 결과값의 크기

한빛미디어㈜ - 26 - ehanbit.net
IT COOKBOOK

chapter 05.
입출력 함수

한빛미디어㈜ - 27 - ehanbit.net
 printf 함수 제대로 사용하기 IT COOKBOOK

• printf 함수는 출력할 데이터를 괄호 안에 넣어주는데 이것을


전달인자라고 한다 .

• 전달인자의 수는 출력되는 값에 따라 가변적이지만 첫번째는


반드시 문자열을 사용해야 한다 .

한빛미디어㈜ - 28 - ehanbit.net
▶ 전달인자가 문자열 하나인 경우 IT COOKBOOK

• 문자열을 그대로 화면에 출력하는 경우에 사용한다 .


printf(“C 언어는 1972 년 데니스리치가 개발하였습니다 .”);

C 언어는 1972 년 데니스리치가 개발하였습니다 .

• 서식문자를 사용하면 다양한 형태로 출력할 수 있다 .

printf(“C 언어는 \n1972 년 \n 데니스리치가 개발하였습니다 .”);

C 언어는
1972 년
데니스리치가 개발하였습니다 .

한빛미디어㈜ - 29 - ehanbit.net
▶ 다양한 서식문자 IT COOKBOOK

• 서식문자에는 줄바꿈문자 외에도 여러 가지가 있다 .


서식문자 의미 기능
\n newline 출력 위치를 다음 줄의 첫번째 칸으로 옮긴다 .
\t tab 출력 위치를 다음 탭 위치로 옮긴다 .
\r carriage return 출력 위치를 현재 줄의 첫번째 칸으로 옮긴다 .
\b backspace 출력 위치를 한 칸 뒤로 옮긴다 .
\a alert 경보음을 낸다 ( 삑 소리가 난다 ).

• 큰 따옴표나 백슬래시 자체를 출력할 때도 백슬래시를 사용한다 .

한빛미디어㈜ - 30 - ehanbit.net
▶ 문자열 외에 출력할 데이터가 있는 경우 IT COOKBOOK

• 단순한 문자열 외에 출력할 데이터가 있는 경우 출력할 데이터의


개수에 맞게 변환문자열을 사용한다 .

한빛미디어㈜ - 31 - ehanbit.net
▶ 다양한 변환문자열을 사용한 예제 IT COOKBOOK

#include <stdio.h>

int main()
{
char ch='A';
char name[80]=" 황금박쥐 ";
int in=10;
double db=16.8; 출력 형태

printf(" 정수형 상수의 출력 : %d\n", -10); -10


printf(" 정수형 변수의 출력 : %d\n", in); 10
printf(" 정수형 수식의 출력 : %d\n", in/3); 3

printf(" 실수형 상수를 소수점 형태로 출력 : %lf\n", 2.5); 2.500000


printf(" 실수형 변수를 지수 형태로 출력 : %le\n", db); 1.680000e+001
printf(" 실수형 수식을 소수점 형태로 출력 : %lf\n", db/4); 4.200000

printf(" 문자상수의 출력 : %c\n", 'F'); F


printf(" 문자변수의 출력 : %c\n", ch); A
printf(" 문자 배열의 출력 : %s\n", name); 황금박쥐
printf(" 문자열상수의 출력 : %s\n", " 날아라 태극호 "); 날아라 태극호

return 0;
}

한빛미디어㈜ - 32 - ehanbit.net
 변환문자열의 정확한 사용법 IT COOKBOOK

• 컴파일러는 변환문자열과 출력할 데이터가 일치하는지 확인하


지 않는다 . 따라서 자료형에 맞게 정확한 변환문자열을 사용
해야 한다 .

한빛미디어㈜ - 33 - ehanbit.net
▶ 정수형 변환문자열의 선택 (%d, %u) IT COOKBOOK

• %d 와 %u 는 출력할 데이터를 각각 다르게 해석한다 .

- 정수형 상수 -7 을 4 비트로 표현할 때 %d 와 %u 는 각각 다르게 출력한다 .

• 정수값의 각 범위에 맞는 적절한 변환문자열은 다음과 같다


.

한빛미디어㈜ - 34 - ehanbit.net
▶ 정수형과 문자형 변환문자열의 선택 (%d, %c) IT COOKBOOK

• 문자상수와 그에 해당하는 아스키코드값은 크기가 같으므로 어떤 변환


문자열을 사용하느냐에 따라 정수값이 출력되거나 문자가 출력된다 .

• 특정 아스키코드값에 해당하는 문자를 확인하는 코드

int a; // char 형 변수를 사용해도 가능하다 .


printf(“ 아스키코드값을 입력하세요 : ”);
아스키코드값을 입력하세요 : 97 ( 엔터 )
scanf(“%d”, &a);
아스키문자는 a 입니다 .
printf(“ 아스키문자는 %c 입니다 .\n”, a);

• % 문자를 출력할 때는 % 기호를 두 번 사용한다 .

printf(“ 당신은 나의 100%% 여인입니다 .”);

한빛미디어㈜ - 35 - ehanbit.net
 scanf 함수 제대로 사용하기 IT COOKBOOK

• scanf 함수의 첫번째 전달인자는 변환문자열이며 두 번째 전


달인자부터 입력 받을 변수를 차례로 나열한다 .

• scanf 함수의 변환문자열에는 불필요한 문자를 사용하지 않는


다.
scanf(“%d %c\n”, &age, &blood_type);

불필요한 문자 !!

한빛미디어㈜ - 36 - ehanbit.net
▶ scanf 함수의 기본적인 사용법 IT COOKBOOK

• 입력에 사용되는 변환문자열은 기본적으로 printf 함수와 같다 .

구분 변환문자열 입력 형태 입력되는 변수의 자료형


%d, %u 10 진수
정수형 %o 8 진수 char, short, int, long 형 변수

%x 16 진수
실수형 %lf, %le 소수점 또는 지수형 double 형 변수
문자형 %c 하나의 문자 char 형 변수
문자열 %s 하나의 문자열 char 배열

• scanf 함수는 값을 저장할 변수의 위치를 알아야 하므로 변수명에 ‘ &’ 를


붙여야 한다 ( 단 , 배열명에는 붙이지 않는다 ).

한빛미디어㈜ - 37 - ehanbit.net
▶ scanf 함수는 변환문자열을 정확히 사용해야 한다 . IT COOKBOOK

• scanf 함수는 입력 데이터의 구분을 화이트스페이스 ( 스페이스 , 엔


터 , 탭 ) 으로 한다 (%d, %lf, %s 변환문자열 ).

scanf(“%d%d”, &a, &b); 10 20 ( 엔터 )

• %c 변환문자열은 화이트스페이스도 하나의 데이터로 입력 받는다 .

scanf(“%c%c”, &a, &b); x y ( 엔터 )

• 화이트스페이스를 구분문자로 사용하기 위해서는 %c 변환문자열 앞에


공백을 사용한다 .

scanf(“%c %c”, &a, &b);

공백을 사용하면 b 에 y 를 입력 받게 된다 .

한빛미디어㈜ - 38 - ehanbit.net

You might also like