본문 바로가기
C 프로그래밍

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

by 솔토지빈 2024. 8. 15.
반응형

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

 

아스키코드값의 표시

컴퓨터에서 사용되는 모든 문자는 고유의 값을 갖고 있으며 이값을 아스키코드(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진수로 변환

148진수로, 16816진수로 표시하는 프로그램을 작성하여 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(0zero)를 붙여야 한다.

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.56798.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 × 103
987.654 9.876540e+02 9.87654 × 102

 

반응형