정수 상수 — 10진수·8진수·16진수 표기 구분 | 기초 C언어 3.3.1
기초 C언어Chapter 03 상수 › Section 03 숫자
3.3.1 정수
네 종류의 상수 가운데 첫 번째. 소수점이 없다는 한 가지가 정수의 전부. 다만 같은 정수를 세 가지 진법으로 적을 수 있고, 내보낼 때도 세 가지 얼굴이 됨.
01정수란교재 49p
- 정수(Integer) — 이름 그대로 소수점 이하의 값을 갖지 않는 온전한 수.
- 예 — 0 77 -250. 값이 0이어도, 마이너스가 붙어도 정수. 소수점만 없으면 됨.
- 왜 나누어 부르는가 — 컴퓨터는 소수점이 없는 수와 있는 수를 서로 다른 방식으로 저장함. 그래서 C언어도 둘을 다른 종류의 상수로 다룸.
- 3.14처럼 소수점이 붙은 수는 정수가 아님 — 그쪽은 실수(다음 절).
02진법이란교재 49p
- 진법 — 숫자를 몇 개까지 쓰고 언제 자리를 올릴지 정해 둔 약속.
- 10진법 — 0부터 9까지 열 개를 쓰다가 열이 되면 자리를 하나 올림
- 여덟 개만 쓰는 약속(8진법), 열여섯 개를 쓰는 약속(16진법)도 만들 수 있음
- C언어의 특별한 점 — 코드 안에서 같은 정수를 여러 진법으로 적는 것을 허용함.
03세 가지로 적는 법교재 49p~50p
110진수 Decimal
- 평소에 쓰는 표기법. 그대로 씀.
- 코드에 숫자를 그대로 쓰면 컴파일러는 10진수로 인식.
- 예 : 15 255
28진수 Octal
- 숫자 앞에 0을 붙임.
- 쓰는 숫자는 0~7. 8과 9는 아예 쓰지 않음.
- 예 : 017(=15) 0377(=255)
316진수 Hexadecimal
- 숫자 앞에 0x 또는 0X를 붙임.
- 0~9와 A~F(소문자도 가능)를 씀.
- 예 : 0xF(=15) 0xFF(=255)
- 16진수에 글자가 끼는 이유 — 한 자리에 열여섯 가지를 담아야 하는데 숫자는 열 개뿐. 모자라는 여섯을 알파벳 앞 여섯 글자로 대신함(A=10 … F=15).
- 어디에 쓰는가 — 메모리 주소나 색상 값을 표현하는 등 시스템 프로그래밍에서 매우 유용.
초보자가 자주 하는 실수 — 앞에 붙인 0
- 자릿수를 맞추려고 07처럼 앞에 0을 붙이면, C언어는 10진수 7이 아니라 8진수 7로 읽음. (마침 값이 같아 그냥 넘어감)
- 08 09 — 8진수에 없는 숫자라 컴파일러가 오류를 내며 멈춤. 그나마 나음.
- 정말 위험한 것은 010 — 오류 없이 조용히 8진수 10, 곧 10진수 8이 되어 버림.
- 숫자 앞의 0은 자리를 채우는 장식이 아니라 진법을 바꾸는 표시.
04같은 값, 세 가지 표기교재 49p~50p
| 값 | 10진수 | 8진수 | 16진수 |
|---|---|---|---|
| 15 | 15 | 017 | 0xF |
| 255 | 255 | 0377 | 0xFF |
- 앞에서 따로따로 지나간 예시들은 사실 같은 두 값을 세 진법으로 적은 것.
- 적는 방식만 다를 뿐 컴퓨터 안에서는 똑같은 하나의 값. 같은 사람을 이름으로 부르든 별명으로 부르든 같은 사람인 것과 같음.
05여러 진법으로 출력하기교재 50p
지금까지는 코드에 적는 방법이었고, 이 표는 화면에 내보내는 방법.
| 변환 지정자 | 의미 | 기억법 |
|---|---|---|
| %d | 값을 10진수로 출력 | Decimal의 d |
| %o | 값을 8진수로 출력 | Octal의 o — 숫자 0이 아니라 알파벳 o |
| %x | 값을 16진수로 출력 | Hexadecimal의 x — 앞에서 본 0x의 그 x |
- %x는 16진수의 글자를 소문자로 찍음. 대문자로 찍고 싶으면 %X.
- %o와 %x는 음수를 넣으면 마이너스가 사라지고 아주 긴 값이 나옴 → 0 이상의 수에 쓴다고 생각할 것.
06값 하나를 세 번 출력교재 50p~51p
CODE 3.3 | 여러 진법으로 출력하기
#include <stdio.h>int main(void) {int value = 100;printf("10진수 표현: %d\n", value);printf("8진수 표현: %o\n", value);printf("16진수 표현: %x\n", value);return 0;}
RESULT
10진수 표현: 100 8진수 표현: 144 16진수 표현: 64
- 03줄이 처음 보는 모양 — 변수를 하나 만드는 줄. int는 정수를 담는 상자, value는 그 상자의 이름, = 100이 처음 넣어 두는 값. 만드는 방법은 4장.
- 저 100은 앞에 아무것도 붙이지 않았으니 10진수로 적은 정수 상수. 상자에 든 값은 이 하나뿐이고, 다음 세 줄은 그 하나를 다르게 보여 줄 뿐.
- 정말 같은 값인지 세어 보면
- 8진수 144 = 64×1 + 8×4 + 1×4 = 64 + 32 + 4 = 100
- 16진수 64 = 16×6 + 1×4 = 96 + 4 = 100
- 주의 — 출력에는 앞의 0이나 0x가 붙지 않음. 화면의 144를 그대로 코드에 옮겨 적으면 10진수 144가 됨.
이 절의 핵심 정리
- 정수 — 소수점 이하가 없는 온전한 수. 0도 음수도 정수다
- 적는 법 — 10진수는 그대로, 8진수는 앞에 0, 16진수는 앞에 0x
- 내보내는 법 — %d · %o · %x
- 적는 방식만 다를 뿐 컴퓨터 안에서는 같은 하나의 값이다
- 자릿수를 맞추려 앞에 붙인 0은 8진수가 된다 — 010은 오류 없이 값만 8로 바뀐다
강의 자료3.3.1 정수
1 / 10
번호를 누르면 해당 장으로 바로 이동합니다 · 방향키 ← → 로도 넘길 수 있습니다
다음 절 · 3.3.2 실수 교재 52p~53p — 소수점이 있는 수를 살펴봅니다.
더 자세한 내용은 교재에서
이 글은 『기초 C언어』 49p~51p의 내용을 강의 영상에 맞춰 핵심만 간추린 요약입니다. 각 개념의 상세한 설명과 예제, 실습 코드, 임용시험 기출문제 풀이는 교재에서 다루고 있습니다.
댓글
댓글 쓰기