[1주1장 CS] 컴퓨터는 어떻게 자연수와 정수를 나타낼까?
태그 1주1장 CS
한 주에 한 장씩 읽는 컴퓨터과학. 이번 주는 컴퓨터에서 어떻게 자연수와 정수를 나타내는지 알아봅니다.
chevron_right 목차
서론
이번 주부터 매주 한 장씩 컴퓨터과학에 대해 알아보는 시리즈를 시작합니다. 이번 주의 주제, “컴퓨터는 어떻게 음수를 나타낼까?”입니다.
진법
진법과 이진법에 대해 잘 알고 계시다면 이 장을 건너뛰어도 좋아요.
진법은 밑이 일 때 ~ 까지의 숫자를 사용, 더 큰 수는 자릿수를 올려 표현하는 기수법 을 말합니다. 밑에 따라 진법이라고 부르고, 위치에 따라 수를 나타내기 때문에 위치 기수법이라고도 합니다. [1] 우리가 흔히 사용하는 진법은 10진법으로, 밑이 10이고 0~9까지의 숫자를 사용합니다.
진법으로 나타낸 수는 번째 자리의 수를 라 하고 밑을 라 할 때, 입니다. 10진법 수 1234로 예를 들어볼까요?
1 | 2 | 3 | 4 | |
모두 더하면 1234가 됩니다.
보다 쉽게 생각하면, 10진법에서는 흔히 1의 자리, 10의 자리와 같은 표현으로 자릿수를 말하곤 합니다. 따라서 다른 진법에서도 가장 작은 자릿수부터 의 자리, 의 자리로 생각하면 보다 쉽게 이해할 수 있습니다.
의 자리 | 의 자리 | 의 자리 | 의 자리 | |
---|---|---|---|---|
1 | 2 | 3 | 4 | |
1000 | 200 | 30 | 4 |
이 글에서는 앞으로 밑이 인 수 를 로 표기하겠습니다.
이진법
이진법은 0과 1만을 사용하는 진법입니다. 위의 예시와 같은 방식으로 이해할 수 있겠죠? 2진법 수 를 위의 방식으로 나타내, 10진법으로 바꿔 봅시다.
의 자리 | 의 자리 | 의 자리 | 의 자리 | |
---|---|---|---|---|
1 | 0 | 1 | 1 | |
8 | 0 | 2 | 1 |
모두 더하면 11이 됩니다. 따라서 입니다.
거꾸로 10진법 수를 2진법으로 바꿔 봅시다. 11을 다시 2진법으로 바꾸어 보겠습니다.
밑 로 몫이 0이 될 때까지 계속 나눠서 묶으면 진법으로 바꿀 수 있습니다. 이제 0을 포함한 자연수를 나타낼 수 있게 되었네요. [2]
컴퓨터에서 음수 표현
그런데 앞서 살펴본 방법은 0을 포함한 자연수만을 표현할 수 있습니다. 컴퓨터에서는 어떻게 음수를 표현할까요?
보수
먼저 보수에 대해 알아보고 넘어가야 합니다.
진법에서 보수는 의 보수와 의 보수가 있습니다. 자리 수 의 의 보수는 이고, 의 보수는 입니다. 따라서 의 보수는 의 보수에 1을 더한 값입니다. [3]
이 글에서는 8자리를 예시로 사용하겠습니다.
1의 보수
먼저 1의 보수를 음수로 생각해 봅시다.
의 1의 보수를 먼저 계산해 봅시다. 이므로,
따라서 의 1의 보수는 , 즉 . 한편, 이는 각 자릿수의 부호를 뒤집은 것, 즉 NOT 연산을 한 것과 같습니다.
1의 보수를 실제로 음수로 사용할 수 있을지 를 계산해 봅시다. 예상이 맞다면, 가 나오겠죠?
원하는 결과가 나왔지만, 중간에 8자리가 넘어간 부분(carry)가 생기면 그것을 다시 더해줘야 하기 때문에 계산이 복잡해집니다. 거기에 0을 나타내는 표현이 2개(8자리라면 과 )가 생기는 문제도 있습니다. [4]
2의 보수
2의 보수를 사용하면 앞선 문제를 해결할 수 있습니다. 2의 보수는 1의 보수에 1을 더한 값입니다. 따라서 의 2의 보수는 입니다. 앞선 계산 을 다시 해 봅시다.
8자리를 넘어가는 부분을 잘라내기면 하면 바로 원하는 값, 가 나옵니다. 이처럼 2의 보수를 사용하면 덧셈이나 뺄셈에서 음수를 자연스럽게 표현할 수 있습니다. 0을 나타내는 표현도 하나만 있어서 비교가 쉽습니다. 이제 왜 컴퓨터에서 음수를 표현하는 데 2의 보수를 사용하는지 알 수 있겠죠?
정리
컴퓨터에서는 음수를 표현할 때 2의 보수를 사용합니다. 앞이 1로 시작하면 음수, 0으로 시작하면 음수로 볼 수 있겠죠. 추가로, 부호가 있는 비트 정수에서는 ~까지 표현할 수 있음을 알 수 있습니다. 예를 들어 부호 있는 8비트 정수는 ~까지 표현할 수 있습니다 (, ).
오버플로
음수를 나타내는 방법을 알았으니, 이제 오버플로
현상도 더욱 잘 이해할 수 있겠습니다. 가장 큰 양수에서 1을 더하면 받아올림이 일어나며 부호가 바뀌고, 가장 작은 정수가 됩니다. 반대로 가장 작은 음수에 1을 빼도 가장 큰 양수가 되어버립니다. 8비트에서의 예를 볼까요?따라서 이 되어버리는 이 현상을 오버플로라고 합니다.
부호 없는 정수
물론 부호 없는 정수에서도 오버플로는 발생합니다. 부호 없는 8비트 정수에서는 ~까지 표현할 수 있습니다. 여기서도 마찬가지 현상을 볼 수 있습니다. 을 봅시다.
8비트로 자르면 이 되어버립니다.
정리
오늘 내용을 간단히 정리해 봅시다.
- 진법: 밑 에 따라 ~ 까지의 숫자를 사용, 가장 작은 자릿수부터 의 자리, 의 자리로 수를 나타내는 법
- 컴퓨터 → 2진법 사용
- 컴퓨터 → 음수를 표현할 때 2의 보수를 사용 ∵ 자연스럽게 음수의 덧셈과 뺄셈을 나타낼 수 있음
- 2의 보수: 비트를 뒤집고 1을 더한 값
참고 자료
- [1] Britannica, “Positional numeral system,” Britannica, https://www.britannica.com/science/positional-numeral-system. [Accessed 22 3 2025].[↑]
- [2] 수학산책, “소수의 진법 변환,” NAVER 지식백과, https://terms.naver.com/entry.naver?docId=3572374&cid=58944&categoryId=58970. [Accessed 22 3 2025].[↑]
- [3] Wikipedia contributors, “Method of complements,” Wikipedia, The Free Encyclopedia, https://en.wikipedia.org/w/index.php?title=Method_of_complements&oldid=1278594637 [Accessed 22 3 2025].[↑]
- [4] Wikipedia contributors, “Ones’ complement,” Wikipedia, The Free Encyclopedia, https://en.wikipedia.org/w/index.php?title=Ones%27_complement&oldid=1229279233 [Accessed 22 3 2025].[↑]
용어
- label기수법
- 기호를 사용해 수를 표현하는 방법과 그 규칙
- label오버플로
- Overflow; 연산 결과가 표현할 수 있는 범위를 넘어가는 현상
인용하기
@misc{devngho202520250322weeklycsintegersincomputers,
author = {Yu, Dongho},
title = {[1주1장 CS] 컴퓨터는 어떻게 자연수와 정수를 나타낼까?},
howpublished = {\url{https://ngho.dev/posts/20250322-weekly-cs-integers-in-computers}},
year = {2025},
month = {mar},
note = {Accessed: 2025-03-23}
}
APA 유동호. (2025년 3월 22일). [1주1장 CS] 컴퓨터는 어떻게 자연수와 정수를 나타낼까?. devngho 블로그. https://ngho.dev/posts/20250322-weekly-cs-integers-in-computers
Chicago 유동호. “[1주1장 CS] 컴퓨터는 어떻게 자연수와 정수를 나타낼까?.” devngho 블로그, 2025년 3월 22일, https://ngho.dev/posts/20250322-weekly-cs-integers-in-computers.
MLA 유동호. “[1주1장 CS] 컴퓨터는 어떻게 자연수와 정수를 나타낼까?.” devngho 블로그, 2025년 3월 22일, https://ngho.dev/posts/20250322-weekly-cs-integers-in-computers.