음수 부호 값은 어떻게 저장됩니까?


13

부호있는 정수의 최대 값과 최소값 으로이 비디오 를 보고있었습니다 .

양의 부호있는 값-0000 0001의 예를 들어보십시오. 첫 번째 비트는 숫자가 양수이고 마지막 7 비트는 숫자 자체임을 나타냅니다. 따라서 쉽게 +1로 해석됩니다.

이제 음수 부호 값-1000 0000의 예를 보자 -8입니다. 좋아, 컴퓨터는 첫 번째 비트 때문에 음의 값이라는 것을 이해할 수 있지만 어떻게 000 0000이 -8을 의미하는지 어떻게 이해합니까?

일반적으로 음수 부호 값은 어떻게 컴퓨터에 저장 / 해석됩니까?


nl.wikipedia.org/wiki/Two%27s_complement 는 이진수가 컴퓨터에 저장되는 방법입니다.
Pieter B

@PieterB 컴퓨터 일 수 있습니다. 그리고 다른 많은 사람들의. 좋은 이유가 있습니다! 그러나 이것이 유일한 방법임을 암시하지 마십시오.
underscore_d

당신이 좋은대로. 나는 적어도 256을 생각할 수 있습니다! 컴퓨터에 (8 비트) 이진수를 저장하는 방법. 그러나 이들 중 대부분 은 엄청나게 바보입니다.
Caleth

C는 칩 제조업체가 데이터를 표현하기로 결정한 방식을 지정하지 않았다. C는 기계 코드로 컴파일되고 칩이 숫자를 저장하는 방법을 재정의하지 않도록주의합니다. 부동 소수점 숫자에도 동일한 규칙이 적용됩니다. 저장 방법을 정의하는 것은 칩 제조업체의 책임입니다. 대부분의 칩 제조업체는 2의 보수를 사용하지만 예외가 있다고 확신합니다.
Berin Loritsch

답변:


29

C 표준은 음수 부호를 나타내는 특정 방법을 요구하지 않습니다.

발생할 수있는 대부분의 구현에서 음의 부호있는 정수는 2의 보수에 저장됩니다 . 음의 부호있는 숫자를 저장하는 다른 주요 방법을 1의 보수 라고 합니다.

N 비트 수의 2의 보수 x는로 정의됩니다 2^N - x. 예를 들어, 8 비트의 2의 보수는 1이다 2^8 - 1, 또는 1111 1111. 8 비트의 2의 보수는 8있다 2^8 - 8진수 인 1111 1000. 이것은 비트를 뒤집고 x1을 더하여 계산할 수도 있습니다 . 예를 들면 다음과 같습니다.

 1      = 0000 0001
~1      = 1111 1110
~1 + 1  = 1111 1111
-1      = 1111 1111

 21     = 0001 0101
~21     = 1110 1010
~21 + 1 = 1110 1011
-21     = 1110 1011

N 비트 수 x의 보수는 기본적으로 모든 비트가 뒤집힌 x로 정의됩니다.

 1      = 0000 0001
-1      = 1111 1110

 21     = 0001 0101
-21     = 1110 1010

2의 보수는 1의 보수에 비해 몇 가지 장점이 있습니다. 예를 들어, '음의 제로'라는 개념이 없기 때문에 많은 사람들에게 혼란을 줄 수 있습니다. 덧셈, 곱셈 및 뺄셈은 부호없는 정수와 마찬가지로 2의 보수로 구현 된 부호있는 정수와 동일하게 작동합니다.


19

이진수로 음수 값을 나타내는 세 가지 잘 알려진 방법이 있습니다.

  1. 부호있는 크기 . 음의 10 진수 값을 처리 할 때와 동일하게 작동하므로 이해하기가 가장 쉽습니다. 첫 번째 위치 (비트)는 부호 (양의 경우 0, 음의 경우 1)를 나타내고 다른 비트는 숫자를 나타냅니다. . 비록 이해하기는 쉽지만, 특히 음수로 산술을 수행 할 때는 컴퓨터를 다루기가 어렵습니다.
    8 비트 부호있는 크기에서 값 8은 0 0001000으로 표시되고 -8은 1 0001000으로 표시됩니다.

  2. 하나의 보완 . 이 표현에서, 부호 비트뿐만 아니라 모든 비트를 플립함으로써 대응하는 양수로부터 음수가 생성된다. 이렇게하면 컴퓨터의 음수를 쉽게 사용할 수 있지만 +0과 -0에 대한 두 가지 고유 한 표현이 복잡해집니다. 모든 비트를 뒤집 으면 인간이 이해하기가 더 어려워집니다.
    8 비트 1의 보수에서 값 8은 00001000으로 표시되고 -8은 11110111로 표시됩니다.

  3. 2의 보수 . 이것은 컴퓨터에서 가장 쉽게 작업 할 수 있지만 인간에게는 이해하기 가장 어렵 기 때문에 오늘날 음의 정수에 가장 일반적으로 사용되는 표현입니다. 1의 보수와 2의 보수 사이의 음의 값에 사용 된 비트 패턴을 비교할 때, 2의 보수에서 동일한 비트 패턴이 다음으로 낮은 수를 인코딩한다는 것을 알 수 있습니다. 예를 들어 11111111은 1의 보수에서 -0, 2의 보수에서 -1, 10000000 (-127 vs -128)과 유사합니다.
    8 비트 2의 보수에서 값 8은 00001000으로 표시되고 -8은 11111000으로 표시됩니다.


8
부호있는 크기에도 두 개의 0이 있습니다.
Jörg W Mittag

부호 / 크기를 언급하면 ​​+1입니다. 흔하지 않고 불편하지만 (사람이 아닌 CPU의 경우!) 알만한 가치가 있습니다.
underscore_d

우리 대부분은 서명 된 크기, 특히 FP 번호로 작업합니다.
Paulo1205

2

부호있는 정수는 http://en.wikipedia.org/wiki/Two%27s%20complement를 사용하여 저장됩니다 .

그럼 당신은 얻을 :

000   0
001   1
010   2
011   3
100   -4
101   -3
110   -2
111   -1

기본적으로 계산이 매우 쉽습니다. 부호있는 정수의 최대 절반까지 계산합니다. +1을하고, 음수로 만들고 카운트 다운을 시작하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.