독학으로 배우는 C언어 018 8진수와 16진수의 표시
Contents

아스키코드값의 표시
컴퓨터에서 사용되는 모든 문자는 고유의 값을 갖고 있으며 이값을 아스키코드(ASCII CODE)라 한다. 아스키코드는 정수 0~255까지로 표시하며 이 중 31 이하의 아스키코드는 문자값이 아닌 특수 기능을 갖는 기능키 값이다.
예를 들어 벨 소리를 내는 CTRL + G 키의 아스키코드값은 7이고 RETURN 키의 아스키코드값은 13이다.
앞에서 이미 다뤘지만, C언어에서는 문자를 단일 인용부호 ( ‘ ’ ) 로 표기하며 만일 a문자를 문자형 변수 data에 기억시킨다면
data='a'와 같이 기술한다.
이때 data 변수는 1바이트 길이의 변수이며 대입된 'a' 문자의 아스키코드인 97이 기억된다.
C언어에서는 문자형 자료를 표현할 때 직접 문자를 단일 인용부호로 표기하는 방법과 아니면 문자에 해당하는 아스키코드로 표현하는 2가지 방법이 있다. 즉 문자형 변수 data에 문자를 대입하여도 되지만 대신 숫자 97을 대입할 수도 있다.
실습 1: 아스키코드의 표시
다음의 프로그램을 작성하여 ex061.c 저장하고 실행해 보자.
#include <stdio.h>
int main(void)
{
char data, su;
data = 'a';
su = 97;
printf("%c\n", data);
printf("%c\n", su);
return 0;
}
◉ 설명 : 행 설명
7행은 이해할 수 있을 것이다.
8행의 경우 su 변수 안에 97이 저장되어 있으나 출력문에서 %c로 표현되기 때문에 97의 아스키코드인 a가 출력된다.
실습 2: 아스키코드의 연산
다음의 프로그램을 작성하여 ex062.c 저장하고 실행해 보자.
#include <stdio.h>
int main(void)
{
char data1, data2, data3;
data1 = 'C' + 3;
data2 = 'K' - 6;
data3 = data1 + (data2 - 'A');
printf("%d %d %d\n", data1, data2, data3);
printf("%c %c %c\n", data1, data2, data3);
return 0;
}
◉ 설명 : 행 설명
- 프로그램에서 직접 문자를 표기하여도 컴퓨터는 이를 아스키코드로 변환하여 처리하고 문자와의 연산을 아스키코드값에서의 연산으로 간주하여 아스키코드 범위에 한 에서만 연산이 가능하다.
- 아스키코드값을 초과하더라도 에라는 발생하지 않는다.
5: 대문자 C의 아스키코드값 67 + 3 = 70, 아스키코드는 F
6: 대문자 K의 아스키코드값 75 - 6 = 69, 아스키코드는 E
7: 70 + (69-65) = 70 + 4 = 74, A의 아스키코드 값은 65
2. 진수의 변환
8진수와 10진수, 16진수를 변환한다.
실습 1: 10진수를 16진수와 8진수로 변환
14를 8진수로, 168을 16진수로 표시하는 프로그램을 작성하여 ex063.c 저장하고 실행해 보자.
#include <stdio.h>
int main(void)
{
int a, b;
a = 14;
b = 168;
printf("%d 의 8진수= %o\n", a, a);
printf("%d 의 16진수= %x\n", b, b);
return 0;
}
◉ 설명 : 행 설명
8진수를 표시하려면 %o를 사용한다.
16진수를 표시하려면 %x를 사용한다.
실습 2: 10진수, 16진수, 8진수 표현
다음의 프로그램을 작성하여 ex064.c 저장하고 실행해 보자.
#include <stdio.h>
int main(void)
{
int dec, oct, hex;
dec = 15;
oct = 015;
hex = 0x2b;
printf("%d %o %x\n", dec, dec, dec);
printf("%d %o %x\n", oct, oct, oct);
printf("%d %o %X\n", hex, hex, hex);
return 0;
}
◉ 설명 : 행 설명
5: 8진수를 사용할 때는 숫자 앞에 0(zero)을 붙여 8진수임을 알려준다.
6: 16진수를 사용할때는 0x(0은zero)를 붙여야 한다.
10진수 표현시 주의할 점은 수치 앞에 무의미한 0(zero)를 붙여서는 안된다.
만일 10진수 15를 표기할 때 015 라고 하면 이는 8진수로 처리하여 엉뚱한 결과를 얻게 된다.
9: 16진수 제어코드를 대문자 X로 표현하면 16진수 출력 결과가 대문자로 표시된다.
실습 3: 16진수 변환기
10진수를 입력하여 10진수와 16진수로 표시하는 프로그램을 작성하여 ex065.c 저장하고 실행해 보자.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int dec;
printf(" 10진수를 입력하세요 ");
scanf("%d", &dec);
printf("\n\n");
printf("10진수 %d 16진수 %X\n", dec, dec);
return 0;
}
실습 4: 10진수 변환기
16진수를 입력하여 16진수와 10진수로 표시하는 프로그램을 작성하여 ex066.c 저장하고 실행해 보자.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int a;
printf(" 16진수를 입력하세요 ");
scanf("%x", &a);
printf("\n\n");
printf("16 진수 %x 10진수 %d\n", a, a);
return 0;
}
◉ 설명 : 행 설명
scanf문에서 %x를 지정하면 16진수의 입력이 된다.
실습 5: 8진수의 연산
8진수 2개을 입력하여 그 곱을 구하여 8진수로 표시하는 프로그램을 작성하여 ex067.c 저장하고 실행해 보자.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int oct1, oct2;
printf(" 8진수 2 개를 입력하세요 ? ");
scanf("%o %o", &oct1, &oct2);
printf("\n");
printf("%o*%o=%o\n", oct1, oct2, oct1 * oct2);
return 0;
}
◉ 설명 : 행 설명
7: scanf문에서 %o를 지정하면 8진수를 입력 받을 수 있다.
3. 지수의 표시
실습 1: 소수를 지수로 표현
소수 1234.567와 98.7654을 지수로 표시하는 프로그램을 작성하여 ex068.c 저장하고 실행해 보자.
#include <stdio.h>
int main(void)
{
float a, b;
a = 1234.567;
b = 987.654;
printf("%E\n", a);
printf("%e\n", b);
return 0;
}
◉ 설명 : 행 설명
- 지수의 표시에는 %E 를 사용한다.
- %E 와 %e 는 출력할 때 지수를 대문자로 표시할 것인지 아니면 소문자로 표시할 것인지의 차이다.
소수 | 지수 | 의미 |
1234.567 | 1.234567E+03 | 1.234567 × 10에 3승 |
987.654 | 9.876540e+02 | 9.87654 × 10에 2승 |
'C 프로그래밍' 카테고리의 다른 글
독학으로 배우는 C언어 020 조건문 단일 if문 (2) | 2024.09.06 |
---|---|
독학으로 배우는 C언어 019 대입 연산자 (0) | 2024.08.28 |
독학으로 배우는 C언어 017 다양한 입력 함수 (0) | 2024.07.30 |
독학으로 배우는 C언어 016 문자 자료의 입력 (0) | 2024.07.21 |
독학으로 배우는 C언어 015 숫자 자료의 입력 (2) | 2024.07.14 |
댓글