10진수를 다른 진법으로 5

Download Report

Transcript 10진수를 다른 진법으로 5

전남 과학대 게임 학과
C 프로그래밍
1
Chapter 02
데이터의 표현
진법 변환
진법은 값을 표현할 때 단위기호를 몇 개 사용하는냐에 따라 결정

10진법, 8진법, 2진법, 16진법의 표현
전남 과학대 게임 학과

- 10진법 : 숫자 0~9까지 10개
- 8진법 : 숫자 0~7까지 8개
- 2진법 : 숫자 0과 1
- 16진법 : 숫자 0~9, a, b, c, d, e, f
2
다른 진법의 수를 10진수로
각 자릿수에 2, 8, 16의 거듭제곱을 차례로 곱해서 모두 더함

2진수 1010을 10진수로 바꾸는 예

16진수 4b를 10진수로 바꾸는 예
전남 과학대 게임 학과

3
2진수를 8진수, 16진수로

2진수 3자리는 8진수 1자리로, 4자리는 16진수 1자리로 바꾼
전남 과학대 게임 학과
4
10진수를 다른 진법으로
10진수를 각 진법의 수로 나누면서 나머지를 차례로 적어줌

10진수 13과 59를 2진수와 8진수로 바꾸는 예
전남 과학대 게임 학과

5
숫자 상수
숫자 데이터를 직접 표현한 것

정수와 실수가 있음
전남 과학대 게임 학과

6
정수형 상수를 다른 진법으로 표현
정수형 상수는 10진법, 8진법, 16진법으로 표현

8진수에는 접두어 0

16진수에는 접두어 0x
전남 과학대 게임 학과

printf(“10진수 상수 12 : %d\n”, 12);
10진수 상수 12 : 12
printf(“8진수 상수 014 : %d\n”, 014);
8진수 상수 014 : 12
printf(“16진수 상수 0xc : %d\n”, 0xc);
16진수 상수 0xc : 12
7
정수를 다른 진법으로 출력

각 진법에 맞게 입출력 할 때는 적절한 변환문자열을 사용
10진수
8진수
16진수
변환문자열
%d
%o
%x
의미
Decimal
Octal
hexa-decimal
전남 과학대 게임 학과
출력 형태
printf(“10진수 12를 10진수로 출력 : %d\n”, 12);
printf(“10진수 12를 8진수로 출력 : %o\n”, 12);
printf(“10진수 12를 16진수로 출력 : %x\n”, 12);
10진수 12를 10진수로 출력 : 12
10진수 12를 8진수로 출력 : 14
10진수 12를 16진수로 출력 : c
8
진법에 맞는 접두어와 함께 출력

변환문자열에 ‘#’플래그(flag)를 사용하면 접두어를 붙여서 출력
전남 과학대 게임 학과
printf(“10진수 12를 8진수로 출력 : %#o\n”, 12);
printf(“10진수 12를 16진수로 출력 : %#x\n”, 12);
10진수 12를 8진수로 출력 : 014
10진수 12를 16진수로 출력 : 0xc
9
정수를 다른 진법으로 입력

키보드입력 14를 각 진법으로 입력 받을 때 실제 입력되는 값
전남 과학대 게임 학과
int val;
printf(“정수값을 입력하세요 : ”);
scanf(“%o”, &val);
// 키보드로 입력되는 값을 8진수로 해석한다.
printf(“입력된 값을 10진수로 출력하면 %d입니다.\n”, val);
정수값을 입력하세요 : 14
입력된 값을 10진수로 출력하면 12입니다.
10
정수값의 비트 표현
정수값은 2진수로 저장

2진수 비트열에서 가장 왼쪽의 비트는 MSB(Most Significant Bit, 가장 오른쪽
전남 과학대 게임 학과

의 비트는 LSB(Least Significant Bit)
11
음수값 표현

MSB를 양수와 음수를 구분하는데 사용
전남 과학대 게임 학과
12
2의 보수 표현

-5를 2의 보수로 표현 예
0000 0101
② 1의 보수 ( 1은 0으로 0은 1로 변경 )
1111 1010
③ 2의 보수 ( 1의 보수에 1을 더함 )
1111 1010
+ 0000 0001
전남 과학대 게임 학과
① 5를 비트로 표현 ( 1 byte 에서 )
1111 1011

음수값을 2의 보수로 표현하는 것이 연산속도가 빠름
13
정수형 변수를 양수값 전용으로 사용
unsigned 예약어를 사용

입출력할 때는 %u변환문자열을 사용
unsigned char uch;
전남 과학대 게임 학과

// uch는 unsigned형으로 선언
printf(“unsigned char형에 최대값을 입력하세요 : ”);
scanf(“%u”, &uch);
// %u변환문자열을 사용하여 입력한다.
printf(“unsigned char형에 저장된 값은 : %u\n”, uch);
// %u로 출력
14
정수형 변수와 실수형 변수
실수형

크기
범위
char
1 byte
-128 ~ 127
short
2 byte
-32768 ~ 32767
int
4 byte
-2147483648 ~ 2147483647
long
4 byte
-2147483648 ~ 2147483647
float
4 byte
3.4 * 10-37 ~ 3.4 * 1038
double
8 byte
1.7 * 10-307 ~ 1.7 * 10308
전남 과학대 게임 학과
정수형
자료형
자료형의 크키를 확인할 때는sizeof연산자를 사용
15
실수형 데이터의 입출력

실수형 값을 입출력 할 때는 %lf, %f변환문자열을 사용
전남 과학대 게임 학과
double real_income;
...
// 실수형 변수 선언
// 실 수입액 계산
printf(“실 수입액은 %lf입니다.”, real_income);
double tax_rate;
scanf(“%lf”, &tax_rate);
// 세율을 저장할 실수형 변수
// 키보드로 세율 입력
데이터형
상수의 표현법
변수의 자료형
데이터의 크기
입출력 변환문자열
정수형
10
int
4바이트
%d
실수형
10.0
double
8바이트
%lf
16
실수형 상수의 지수 표현
아주 크거나 아주 작은 실수값은 지수형태로 표현

소수점 이하 출력 자리수를 조절하는 방법
전남 과학대 게임 학과

printf(“0.5e01 -> %.0lf\n”, 0.5e01);
printf(“+.5e-9 -> %.10lf\n”, +.5e-9);
0.5e01 -> 5
+.5e-9 -> 0.0000000005
17
지수 형태의 입출력

지수 형태로 입출력할 때는 %le변환문자열을 사용
printf(“지수형 상수 0.00625e3을 지수 형태로 출력 : %le\n”, 0.00625e3);
소수점형 상수 10002.0을 지수 형태로 출력 : 1.000200e+004
지수형 상수 0.00625e3을 지수 형태로 출력 : 6.250000e+000

전남 과학대 게임 학과
printf(“소수점형 상수 10002.0을 지수 형태로 출력 : %le\n”, 10002.0);
지수형태로 입력 받아서 소수점 형태로 출력하는 예
double db;
printf(“실수값을 지수 형태로 입력하세요 : ”);
scanf(“%le”, &db);
printf(“입력된 값을 소수점 형태로 출력하면 : %lf\n”, db);
18
실수값의 비트 표현
실수값은 IEEE754표준에 따라 저장

double형 변수(8바이트)에 실수값을 저장하는 예

실수형 자료형은 signed와 unsigned를 사용하지 않음
전남 과학대 게임 학과

19
문자 상수

문자상수는 문자를 작은따옴표로 묶어서 표현
- 문자상수의 크기는 1바이트
-
- 아스키 코드값으로 번역되므로 실제로는 정수형 상수와 같이 처리
1
전남 과학대 게임 학과
-
1
0000 0000 0000 0000 0000 0000
전체 4바이트
20
문자 변수

문자상수는 1바이트 크기의 char형 변수에 저장

// A는 char형 변수명
// 변수 A에 문자상수 ‘A’를 저장
전남 과학대 게임 학과
char A;
A = ‘A’;
char형 변수는 작은 범위의 정수값도 저장
char A;
A = 123;
// A는 char형 변수명
// 변수 A에 정수값 저장
21
문자 데이터 입출력

변환 문자열 %c 사용.
printf(“혈액형을 입력하세요(AB형 제외): ”);
scanf(“%c”, &blood_type);
printf(“당신의 혈액형은 %c형입니다.\n”, blood_type);
전남 과학대 게임 학과
char blood_type;
혈액형을 입력하세요 : B
당신의 혈액형은 B형입니다.

char형 변수라도 정수값을 입출력 할 때는 %d를 사용
22
나눗셈, 나머지 연산자
나눗셈 연산자(/)의 피연산자가 모두 정수형이면 몫이 구해짐.

나머지 연산자(%)의 피연산자는 모두 정수형이어야 함.

몫과 나머지 연산자는 어떤 값을 일정한 단위로 걸러낼 때 유용
전남 과학대 게임 학과

23
자판기 잔돈 계산 프로그램
#include <stdio.h>
printf("돈을 입력하세요 : ");
scanf("%d", &input);
change = input - 150;
w500 = change / 500;
change = change % 500;
w100 = change / 100;
change = change % 100;
w50 = change / 50;
change = change % 50;
w10 = change / 10;
printf("500원짜리 동전 %d개\n", w500);
printf("100원짜리 동전 %d개\n", w100);
printf("50원짜리 동전 %d개\n", w50);
printf("10원짜리 동전 %d개\n", w10);
return 0;
}
전남 과학대 게임 학과
int main()
{
int input, change;
int w500, w100, w50, w10;
24
형변환
서로 다른 형태의 값이 연산될 때는 형태가 하나로 통일

형변환은 데이터의 손실을 최소화하는 방향으로 수행

문자 데이터끼리 연산 할 때는 둘 다 정수형으로 변환

대입문에서는 왼쪽 변수의 형태에 따라 변환
int result;
result = 2.5;
전남 과학대 게임 학과

소수부분은 버려지고 정수값만 저장
25
형변환 연산자

형변환 연산자는 피연산자의 형태를 명시적으로 변환
int employed, graduation;
// 취업자수와 졸업생수를 저장할 변수
double percentage;
// 취업률을 저장할 변수
scanf(“%d%d”, &employed, &graduation);
전남 과학대 게임 학과
- 취업자 수와 졸업생 수를 입력 받아서 취업률
// 취업자수와 졸업생수 입력
26
* 형변환하지 않는다면 취업률은 항상 0%이다.
형변환 연산자

실수를 정수형으로 형변환하면 정수값만 계산
전남 과학대 게임 학과
- 0.375시간은 몇 분, 몇 초인가?
double time = 0.375;
int min;
// 단위는 시간
// 분을 저장하기 위한 변수
time = time * 60;
min = (int)time;
time = time – min;
// 분 단위로 환산, time은 22.5
// 정수값 22만 추려서 min에 저장
// time에는 분 단위 값 0.5만 남긴다.
printf(“분 : %d\n”, min);
printf(“초 : %d\n”, (int)(time *60));
// 분 출력
// 초 단위로 환산한 후에 형변환하여 출력
27