티스토리 뷰
컴퓨터는 덧셈과 뺄셈을 2의 보수를 이용해 계산합니다.
정수는 양수와 음수로 이루어져 있으므로 양수, 음수의 덧셈과 뺄셈을 모두 살펴보아야합니다.
이 계산에서는 저장공간이 8비트로 이루어져 있다고 가정하고 해보겠습니다. (8개의 숫자밖에 저장 못함)
- 먼저 양수 + 양수 의 계산을 해보겠습니다.
4 + 5인 경우, 먼저 컴퓨터 내부에서는 2진수로 계산이 되므로 2진수로 먼저 변환해 보겠습니다.
4 -> 00000100
5 -> 00000101
그리고 두 수를 더하면 (2진수 덧셈에서는 0과 1을 더하면 1이되고, 1과 1을 더하면 0이되고 자리올림이 일어납니다.)
00000100
00000101
------------
00001001
이 됩니다. 이는 10진수로 9입니다.
- 다음으로 양수 + 음수를 계산해 보겠습니다.
4 - 5인 경우, 4 + (-5) 로 계산합니다.
4 -> 00000100
-5 -> 11111011
그리고 두 수를 더하면
00000100
11111011
------------
11111111
이 됩니다. 이는 10진수로 -1이 됩니다. (2의 보수로 변환 : 11111111->00000000->00000001)
- 마지막으로 음수 + 음수를 계산해 보겠습니다.
- 4 - 5인 경우, (-4) + (-5) 로 계산합니다.
-4 -> 11111100
-5 -> 11111011
그리고 두 수를 더하면
11111100
11111011
-----------
11110111
이 됩니다. (저장 공간이 8개 밖에 없으므로 최상위 비트가 넘어가는 것은 무시합니다.)
이는 10진수로 -9가 됩니다. (2의 보수로 변환 : 11110111 -> 00001000 -> 00001001)
* 주의해야 할 점
덧셈과 뺄셈에서는 오버플로우를 조심해야 합니다.
예를 들어 128 + 128 을 계산해 보겠습니다.
128 -> 10000000
128 -> 10000000
두 수를 더하면
10000000
10000000
-----------
00000000
최상위 비트는 저장공간이 8개 밖에 없으므로 저장되지 않습니다.
따라서 정답은 256이 아니라 0 이 나오게 됩니다.
이러한 부분을 막기 위해서는 정수의 저장공간을 충분히 확보하거나, 다른 방법에 의해서 계산하는 것이 필요합니다.
'컴퓨터' 카테고리의 다른 글
Unicode - UCS-2, UTF-16, UTF-8, UTF-32 (1) | 2016.11.10 |
---|---|
ASCII 와 ANSI encoding (0) | 2016.11.09 |
왜 숫자는 0부터 세어야 하는가? (1) | 2016.11.08 |
[컴퓨터개론] 2의 보수 (1) | 2016.11.04 |
- Total
- Today
- Yesterday
- 인코딩
- utf-32
- MySQL
- download
- winetricks
- UTF8
- 설치
- 안드로이드
- 객체란
- libgcrypt
- 컴퓨터 숫자
- install
- unreal4
- 언리얼 엔진4
- mariasql
- object orient
- ubuntu
- 우분투
- void* arg
- locales
- docker
- Android
- 2의 보수
- 왜 0부터
- 다운로드
- 한글
- 여러 인자
- Uniity5
- libgcrypt11
- wine1.8
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |