내가 본 대부분의 설명과 마찬가지로 위의 설명은 2의 보수로 작업하는 방법에 대해 분명하지만 실제로 는 무엇인지 설명하지는 않습니다. 수학적으로. 나는 적어도 정수에 대해 그렇게하려고 노력할 것이고 아마도 아마도 가장 친숙한 배경을 다룰 것입니다.
그것은 소수점 작동 방법 리콜 :
2345
작성하는 방법이다
2 × 10 3 + 3 × 10 2 + 4 × 10 1 + 5 × 10 0 .
같은 방법으로 이진수는 숫자를 쓰는 방법입니다. 같은 일반적인 생각에 따라 0 과 1 하지만 10을 2로 바꾸는 방법입니다. 그런 다음 이진수로
1111
은
1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0 을 쓰는 방법이며
, 해결하면 15 (기본 10)와 같습니다.
8 + 4 + 2 + 1 = 15 이기 때문입니다 .
이것은 모두 양수에 적합합니다. 인간이 10 진수로하기 때문에 마이너스 부호를 붙이려는 경우 음수에도 적용됩니다. 그것은 컴퓨터에서도 가능하지만 1970 년대 초반부터 그런 컴퓨터를 보지 못했습니다. 나는 다른 토론의 이유를 남길 것입니다.
컴퓨터의 경우 음수에 대한 보수 표현 을 사용하는 것이 더 효율적 입니다. 그리고 여기 종종 간과되는 것이 있습니다. 보수 표기법에는 숫자의 숫자에 대한 반전이 포함됩니다. 심지어 정상적인 양수 앞에 오는 암시 적 제로도 포함됩니다. 문제가 발생하기 때문에 어색합니다. 고려할 무한 자릿수 일 수 있습니다.
다행히 컴퓨터는 무한대를 나타내지 않습니다. 숫자는 특정 길이 (또는 원하는 경우 너비)로 제한됩니다. 양의 이진수로 돌아가지만 특정 크기로 돌아가 봅시다. 이 예제에서는 8 자리 ( "비트")를 사용합니다. 따라서 이진수는
00001111
또는
0 × 2 7 + 0 × 2 6입니다. + 0 × 2 5 + 0 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0입니다.
2의 보수 음수를 형성하기 위해 먼저 모든 (이진수) 숫자를 보완하여
11110000 을 형성
하고 1을 추가하여 11110001 을 형성
합니다.
하지만 -15를 의미한다는 것을 어떻게 이해해야합니까?
답은 상위 비트 (가장 왼쪽 비트)의 의미를 변경한다는 것입니다. 이 비트는 모든 음수에 대해 1 이됩니다. 변화는이에 표시되는 숫자의 값에 기여의 부호를 변경하는 것입니다 그래서 지금 우리. 11110001가 대표하는 이해된다
- 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + 0 × 2 3 + 0 × 2 2 + 0 × 2 1 + 1 × 2 0
해당 표현 앞에 "-"가 표시되어 있습니까? 부호 비트는 가중치 -2 7 , 즉 -128 (기본 10)을 지니고 있음을 의미합니다 . 다른 모든 위치는 부호없는 이진수에서와 동일한 가중치를 유지합니다.
-15를 계산하면
-128 + 64 + 32 + 16 + 1
입니다. 계산기에서 사용해보십시오. -15입니다.
컴퓨터에서 음수를 나타내는 세 가지 주요 방법 중 2의 보수는 일반적인 사용 편의성을 위해 손을 down습니다. 그러나 이상한 점이 있습니다. 바이너리이기 때문에 가능한 많은 비트 조합이 있어야합니다. 각 양수는 음수와 쌍을 이룰 수 있지만 0은 하나뿐입니다. 0을 부정하면 0이됩니다. 따라서 부호 비트에 1 이 있고 다른 곳에 0이 있는 숫자가 하나 더 있습니다. 해당 양수는 사용중인 비트 수에 맞지 않습니다.
이 숫자에 대해 더 이상한 점은 1을 보완하고 추가하여 양수를 만들려고하면 동일한 음수를 다시 얻는다는 것입니다. 제로가 이것을하는 것은 당연한 것처럼 보이지만 이것은 예상치 못한 일이며 컴퓨터를 제외하고는 일반적으로 고정 길이 산술이 아니라 무제한의 자릿수 공급을 생각하기 때문에 우리가 익숙한 행동이 아닙니다.
이것은 이상한 빙산의 일각과 같습니다. 수면 아래에 더 많은 거짓말이 있지만, 이것으로 충분합니다. 고정 소수점 산술에 대해 "오버플로"를 연구하면 더 많은 것을 찾을 수 있습니다. 당신이 정말로 그것에 들어가기를 원한다면, 당신은 또한 "모듈 식 산술"을 연구 할 것입니다.