알아둘 것

편집
  • 이 문서에서는 정규표현식이 사용되기도 하므로, 주의를 기울여 봐야합니다.
  • 이후부터는 딱딱한 어체로 글을 작성합니다.

지킬 것

편집
  • 문서를 저장할 때는 꼭 "미리보기"를 하고, 꼼꼼히 살필 것.
  • "사소한 편집"을 주의!
  • 편집요약에 「.+어 위키백과의 ".+" 문서의 "yyyy년 mm월 dd일 hh시 mm분" 버전을 참조하였습니다.」라는 내용을 넣을 것.

참고 문서

편집

다음 번역 대상

편집
  • Signed number representations (符号付数値表現)
  • 음의 정수, 正の数と負の数, Negative and non-negative numbers
음의 정수양의 정수, 음수, 양수 문서를 하나로 통합해서, 다른 언어의 위키처럼 구성해야할 필요성이 있다.
(음의 정수 문서 자체는 그대로 두고, 새 제목(양수와 음수)을 생성해 만든 뒤, 토론을 해서 다른 문서들을 처리한다.)

해야할 것

편집
부호 있는 수 표현에서 「[[양수 (수학)|양]]과 [[음의 정수|음]]」을 아래와 같이 수정한다.
「[[양수와 음수|양과 음]]」

번역 중 (부호 있는 수 표현, 符号付数値表現, Signed number representations)

편집

부호 있는 수 표현이란 것은, 컴퓨터 내부에서 수의 을 표현하는 방법이다. (즉 수가 0보다 큰가 작은가를 표현하는 방법이다.)

수학에서는 일반적으로 마이너스 기호인 "−"를 수의 앞에 붙이는 것으로 음수를 표현한다. 하지만, 컴퓨터에서는 음수를 나타내는 방법이 여러가지이다. 여기서는 이진법을 확장해 음수를 나타내는 방법 4가지(부호-가수부, 1의 보수, 2의 보수, 오프셋 바이너리(Offset binary))를 설명한다.

대부분의 최근 컴퓨터들은 2의 보수 표현 방법을 주로 사용하지만, 다른 표현 방법이 전혀 쓰이지 않는 것은 아니다.

부호-가수부

편집
8비트 부호-가수부
비트 패턴 부호-가수부 표현 부호 없는 표현
00000000 0 0
00000001 1 1
00000010 2 2
... ... ...
01111111 127 127
10000000 −0 128
10000001 −1 129
10000010 −2 130
... ... ...
11111111 −127 255

이진수에 부호를 붙이는 문제를 생각했을 때 처음 떠올릴 수 있는 것은 부호 비트를 추가해서 양수, 음수를 나타내는 것이다. 부호 비트(보통 최상위 비트(MSB))가 0이면 양의 수를 나타내고, 1이면 음수를 나타내며, 나머지 비트열은 그 수의 가수부(또는 절대값)가 된다. 1바이트로 수를 나타내는 경우에 부호로 1비트를 사용하므로, 나머지 7비트로 나타낼 수 있는 가수부의 범위는 0000000(0) ~ 1111111(127)이 된다. 따라서 1바이트로 나타낼 수 있는 수의 범위는 −12710 ~ +12710이 된다. 결과적으로, 이 표현 방법에서는 2종류의 0이 있다(00000000(0)과 10000000(−0)). 십진수 −43을 이 방법으로 표현하면 10101011이 된다.

이 방법은 보통의 부호 표시 방법(숫자열 앞에 "+"나 "−"를 부여하는 방법) 그대로라고 말할 수 있다. 초기의 이진 컴퓨터(예를 들면 IBM7090) 중에는 이 표현 방법을 채용했던 것도 있다. 아마도 일반적인 표현 방법으로부터 자연스럽게 연상된 것이라고 생각된다. 또, 많은 10진 컴퓨터는 부호-가수부를 사용하고 있다.


1의 보수

편집
8비트 1의 보수
비트 패턴 1의 보수 표현 부호 없는 표현
00000000 0 0
00000001 1 1
... ... ...
01111101 125 125
01111110 126 126
01111111 127 127
10000000 −127 128
10000001 −126 129
10000010 −125 130
... ... ...
11111110 −1 254
11111111 −0 255

이진수에서의 1의 보수 표현이라는 것은, 양수의 1의 보수로 음수를 나타내는 것이다. 즉 음수를 표현할 때, 음수의 절대값에 비트 단위로 NOT을 적용하여 음수를 표현한다. 예를 들면, 00101011(43)의 1의 보수는, 11010100(−43)이다.

부호-가수부 표현 처럼, 1의 보수 표현에서도 2종류의 0이 있으며(00000000(+0), 11111111(−0)), 1바이트에서 1의 보수 표현으로 나타낼 수 있는 수의 범위는 −12710 ~ +12710이다.

이 방법에서 두개의 수를 더하려면, 먼저 보통의 이진수 덧셈을 한 뒤, 연산의 결과로 나온 캐리(연산 오버플로)를 다시 더할 필요가 있다. 예를 들어 −1(11111110)와 +2(00000010)을 더해보면, 연산 결과로 00000000과 1(캐리)이 나오게 된다. 즉 단지 이진수를 그대로 더하기만 해서는 0(00000000)이라는 잘못된 답이 나오게 된다. 여기에 연산 오버플로인 1을 더하게 되면, 바른 답인 +1(00000001)이 나오게 된다.

이 방법은 옛날 컴퓨터에서 흔한 방법이었다. PDP-1라던가 UNIVAC 1100/2200 series 등 많은 시스템이 1의 보수 방법을 사용했었다.

덧붙여, 「1의 보수」는 영어로 "ones' complement"이며, 「2의 보수」가 "two's complement"로 표기되는 것과 비교해 보았을 때, 아포스트로피(')의 위치가 다른 것을 알 수 있다. 이것은 1의 보수가 실제로는 모든 자리의 값이 1인 비트열에서 원래의 수를 빼는 것으로 부호를 반전 시키기 때문이다. 반면, 2의 보수는 2의 거듭제곱에서 원래의 수를 빼서 부호를 반전시킨다.[1] (이것에 대한 자세한 설명은 2의 보수에서 설명하겠다.)

IPv4의 헤더 체크섬은 1의 보수를 사용하고 있다.

참고로 부호-가수부 표현에서 음수의 가수부를 각 비트마다 반전시키면, 1의 보수 표현으로 변환된다.