2의 보수의 장점은 무엇입니까?


11

일부 ADC / DAC 장치에서는 2의 보완 형식으로 데이터를 출력 / 입력하는 옵션이 있습니다.

Two 's Complement 형식으로 디지털 데이터를 표시하면 어떤 이점이 있습니까? 간단한 이진 코드를 사용하여 변환 시간을 절약 할 수 있다면?


4
Two의 칭찬 이진 코드입니다 ...
Mooing Duck

"대수는 2의 보수 인 기계 (우주)에서 실행됩니다"-HAKMEM 154 ( inwap.com/pdp10/hbaker/hakmem/hacks.html )
ChrisInEdmonton

2
2의 보수 중 5는 무엇입니까? 101. 이진 코드에서 5는 무엇입니까? 101. 2의 보수에서 -5는 무엇입니까? 1 ... 11111011. 이진 코드에서 -5는 무엇입니까?
Uhh

음의 출력을 갖는 ADC를 갖는 것은 드문 특별한 경우처럼 보입니다. 측정 된 전압이 전압 기준보다 낮다는 것은 무엇을 의미합니까? 그런 ADC를 어떻게 구축하겠습니까? 부하가 음수 인 캡을 사용한 연속 근사치 ...?
Lundin

complEmentcomplIment의가지 단어 가 있습니다 . 이 주제 는 매우 예의 바르고 종종 당신에 대해 좋은 말을 하지만 , 여기의 주제는 보완 입니다.
피트 베커

답변:


11

부호있는 정수에 대한 2의 칭찬 표현은 하드웨어에서 조작하기 쉽습니다. 예를 들어, 부정 (즉, x = -x )은 숫자의 모든 비트를 뒤집고 1을 추가하여 간단히 수행 할 수 있습니다. 원시 바이너리 (예 : 부호 비트)에서 동일한 작업을 수행하려면 스트림의 특정 비트를 특수한 것으로 처리해야하므로 일반적으로 훨씬 더 많은 작업이 필요합니다. 더하기도 마찬가지입니다. 음수에 대한 더하기 연산은 양수에 대한 더하기 연산과 동일하므로, 음의 경우를 처리하기 위해 추가 논리 (펀치 의도가 없음)가 필요하지 않습니다.

그렇다고해서이 데이터의 소비자로서 자신의 관점에서 더 쉬워지는 것은 아니지만 장치의 설계 노력과 복잡성을 줄여서 아마도 더 저렴하게 만들 수 있습니다.


1
비트를 뒤집은 다음 1을 추가하여 부정, 아니오?
Scott Seidman

2
@ScottSeidman 예, 죄송합니다. 그 비트를 잊었습니다. 수정 :)
다항식

1
실제로, 최대 선택성을 위해 프로세서에 따라 x = x * -1 또는 x = 0- x 를 취하는 단일주기 일 수도 있고 x = ~ x + 1의 경우 최소 2주기 일 수도 있습니다.
markt

@markt 예. 그러나 최소한의 장치 만 구현하는 경우 (즉, 전체 프로세서가 아닌) 실리콘의 복잡성을 최소한으로 줄이는 것이 좋습니다.
다항식

5
+1 또한, 2의 보수 만 두 가지는 결국 (예 : 1의 보수 또는 부호 비트)를 0으로 다른 사람을위한 하나의 값을 가진다
sbell

5

ADC는 데이터를 변환 할 수 있으며 (0 ~ 5V 사이의 입력 전압) 서명되지 않은 데이터 (0V = 0, 5V = max 코드) 또는 서명 된 데이터 (2.5V = 0, 0V = max -ve, 5V = max)가 필요합니다 + ve).

2의 보수가 부호있는 데이터에 대한 가장 일반적인 컴퓨터 표현 일뿐 아니라 위에서 설명한 두 형식 간의 변환은 매우 간단합니다. 간단히 MSB를 반전시킵니다!

이것은 ADC의 내부 로직에 추가하기에 엄청나게 저렴하며 데이터 시트에서 ADC에 또 다른 판매 포인트를 제공합니다 ...


방금 2의 보수와 오프셋 바이너리 사이의 MSB 스위치를 아래 주석으로 추가했습니다
Scott Seidman

3

음수의 표현에 대해 수학을 수행해야하는 경우, 2의 보수는 오프셋 이진보다 쉽게 ​​"signed int"데이터 유형과 일치합니다. 컴파일러는 단순히 처리 방법을 알 것입니다. 그렇지 않으면 시계 틱을 앞뒤로 변환하는 데 사용합니다.


1

문제는 ADC가 직선 이진보다 2의 보수 형태로 값을 반환하는 데 시간이 더 걸린다는 것을 암시하는 것 같습니다. 이는 ADC의 특정 구현에서 발생할 수 있지만 일반적으로 사실이 아닙니다 (예를 들어 MSP430 시리즈 마이크로 컨트롤러에는 ADC 주변 장치 온칩이 있으며이 값은 직선 이진 또는 2의 보수로 값을보고합니다. 두 경우 모두 동일한 횟수의 사이클을 수행합니다).

그렇게하지 않으면 2의 보수와 직선 이진 중 하나를 선택하면 트랜스 듀서 작동 방식과 데이터 처리 방식이 결정됩니다.

직선 이진 모드에서 ADC는 측정 된 아날로그 수량 (실제로 항상 전압)의 크기와 풀 스케일 기준 수량 간의 비율을 나타내는 숫자를 제공합니다. 예를 들어, 10 비트 ADC는 0에서 1023 (포함)의 값을 반환 할 수 있습니다. ADC의 기준 전압의 절반 (예 : 2.50V) 인 전압 (예 : 1.25V)을 측정하는 경우 읽은 이진 코드는 읽을 수있는 최대 값의 절반 (512 이상)이됩니다. ADC의 라운딩 및 비선형성에 영향을받습니다.

예를 들어 탱크의 로켓 연료 양을보고하는 변환기가 있다고 가정합니다. 0V는 탱크가 비어 있음을 의미하고 2.5V 볼트는 가득 찼음을 의미합니다. 트랜스 듀서를 ADC에 연결하기 만하면됩니다.

그러나 위 단락에서는 음의 전압을 측정 할 수있는 방법이 없습니다. 탱크 내외부에서 로켓 연료의 흐름을 측정하려면 어떻게해야합니까? ADC는 음수를 측정 할 수 없으므로 문제가 있습니다. 그러나 2의 보수 모드를 사용하여 쉽게 위조하는 방법이 있습니다.이 경우 트랜스 듀서 출력이 다시 바이어스되어 영점이 ADC의 두 기준 전압 사이의 중간 지점이됩니다. 즉, 양의 흐름은 1.25V ~ 2.50V 사이의 전압으로 표시되고 음의 흐름은 1.25V ~ 0V로 표시되므로 탱크로 유입되면 ADC 코드가 512 ~ 1023으로 바뀌고 감사에서 유출됩니다. 511에서 0까지의 코드 (이진 형식).

이제는 정말 불편합니다. 측정을 수행하기 전에 각 측정에서 512를 빼야합니다. 이는 -512에서 +511 사이의 숫자입니다. 2의 보수 모드의 요점 은 이것이 당신을 위해 이것을 한다는 것입니다!

그러나 서명 된 결과를 생성하는 변환기와 함께 직선 이진을 계속 사용할 수 있습니다. 예를 들어 트랜스 듀서에 차동 출력이있을 수 있습니다.이 경우 어쨌든 비 반전 출력에서 ​​반전 된 출력을 빼고 싶으므로 2의 보수를 사용하는 것이 유리합니다.


1

이 2의 보완 시스템은 간단한 하드웨어가 자연스럽게 작동하는 방식에서 유래하기 때문에 사용 중입니다. 예를 들어 자동차의 주행 거리계를 생각하면 0으로 재설정됩니다. 그런 다음 기어를 뒤집어 놓고 1 마일 뒤로 주행하십시오 (실제로이 작업을 수행하지 마십시오). 주행 거리계 (기계식 인 경우)는 0000에서 9999까지 구르 게됩니다. 두 보완 시스템은 비슷하게 작동합니다.

여기에 이미지 설명을 입력하십시오


나는 여기에 새로운 정보를 제공하지 않고 누군가 도움이 될만한 주행 거리계 예제 만 제공합니다. 어렸을 때 2의 보완 시스템의 이론적 근거를 이해하는 데 도움이되었습니다. 그 후, 가산기, 감산기 등이 2의 보수 시스템과 잘 작동한다는 것을 직관적으로 쉽게 받아 들일 수있었습니다.

그리고 네, 닛산의 주행 거리계는 이런 식으로 작동합니다.


답은 오버플로 (및 언더 플로)에 관한 것이지만 주행 거리계는 음수를 표시하지 않기 때문에 2의 보수 관련 문제를 다루지 않습니다.
marcelm

@marcelm, 사실, 주행 거리계 예제 2의 보수를 설명합니다. 단지 PkP가 설명과 함께 충분히 가지 않았을뿐입니다. 6 자리 주행 거리계가 0을 판독하고 1 마일을 반대로 운전하면 -1을 읽게됩니다. 대신 999999를 읽습니다. 이는 999999가 -1을 나타내는 6 자리 10의 보수이기 때문입니다.
Solomon Slow

@jameslarge 아니요, 여전히 그렇지 않습니다. 답에 실제로 2의 보수에 닿는 것은 없습니다. 또는 사람의 보수, 부호 크기 또는 부호있는 숫자 표현.
marcelm

@marcelm 그렇습니다 : 2의 보수 시스템의 핵심 아이디어 : 0에서 1을 뺀 값은 표현 가능한 최대 부호없는 정수와 같습니다. 이것이 2의 보수 시스템의 아이디어입니다. 다른 서명 된 숫자 표현은 이것을 (내 지식으로) 제공하지 않습니다. 주행 거리계의 예는이 동작 특성이 엔지니어링의 단순성에서 얼마나 자연스럽게 나오는지 보여줍니다. 주행 거리계의 경우 : 기계 공학에서. 기계 및 전자 분야에서이 시스템 (2의 보완 시스템)은 가장 간단한 방법입니다.
PkP

0

다른 사람들은 이미 두 개의 보완 바이너리가 컴퓨터 하드웨어에 편리한 이유에 대해 답변했습니다. 그러나 A / D가 왜 "직진 이진"대신에 두 개의 칭찬을 출력하는지 묻는 것 같습니다 (실제로 의미하는 것).

대부분의 A / D는 0에서 2 N -1 사이의 간단한 부호없는 이진 값을 출력합니다 . 여기서 N은 A / D가 변환되는 비트 수입니다. 이것은 또한 값이 음수가되지 않는다는 점에서 두 가지 칭찬 표기법으로 간주 될 수 있습니다. 양수 만 다루는 경우 대부분의 이진 표현은 동일합니다. 여기에는 두 가지 칭찬과 부호 크기가 포함됩니다.

일부 A / D, 특히 마이크로 컨트롤러에 내장 된 A / D는 범위의 하반부에 음수 값을 생성 할 수 있습니다. 이것은 바이폴라 신호를 측정 할 때 인식되는 이점이 될 수 있습니다.

적어도 마이크로 컨트롤러에서 이것은 일반적으로 바보입니다. 경우에 따라 변환없이 A / D 값을 직접 사용할 수도 있습니다. 이 경우 다른 모든 값을 이미 A / D 범위로 변환했습니다. 음수가 아닌 모든 숫자로 제한하면 실제로 단순화됩니다.

그렇지 않으면 A / D 판독 값에 스케일링 및 오프셋을 적용하여 내부적으로 값에 사용하는 단위로 가져올 수 있습니다. 여기서 다시 부호없는 값이 A / D에서 직접 나오는 단점은 없습니다. 사실, 나는 보통 스케일링과 오프셋 전에 로우 값에 로우 패스 필터링을 적용합니다. 이러한 값이 음수 인 것을 아는 것은 계산을 약간 단순화합니다. 부호없는 값으로 크기 조정을 수행하면 상황이 조금 더 단순 해집니다.

100 개가 넘는 마이크로 컨트롤러 프로젝트에서 단일 사례를 기억할 수 없었는데, A / D를 부호없는 출력 형식 이외의 용도로 사용했습니다.

따라서 "두 칭찬"을 출력하는 A / D의 장점에 대한 질문에 답하기 위해 두 가지 답변이 있습니다.

  1. 어쨌든이 값은 대부분 음수가 아니기 때문에 두 칭찬과 부호 크기와 같은 다른 표기법의 차이점을 알 수 없습니다.

  2. 장점은 매우 미미합니다. 마이크로 컨트롤러 내부에는 본질적으로 존재하지 않습니다.

    전용 하드웨어에서는 음의 입력 전압을 나타내는 음의 값을 갖는 것이 유리할 수 있습니다.이 경우 2 개의 칭찬이 값의 범위를 처리하는 가장 쉬운 방법입니다. 입력 전압 범위가 0에 대해 대칭이 아닌 경우이 장점은 사라집니다.


-1

이 '직선 이진 코드'는 무엇입니까? 음수의 경우 '1', 양수의 경우 '0'(또는 그 반대 ) 의 부호 비트를 의미한다고 가정합니다 . 이것은 아직 언급되지 않은 두 가지 보완에 비해 두 가지 단점이 있습니다. 요즘은 크게 관련이 없으며 하나는 중요합니다.

크게 관련이없는 것은 하나의 적은 수, 즉 8 비트에서 255 개의 숫자를 나타낼 수 있다는 것입니다. 이것은 32 또는 64 비트가있을 때 관련이 없지만 작업 할 4 또는 6 비트가 적을 때 중요합니다.

더 중요한 것은 동일한 숫자를 나타내는 두 가지 방법이 있다는 것입니다. 특히 0-+0 및 -0이지만 +0 및 -0은 같은 숫자이므로 구현에서 이러한 숫자를 비교하지 않아야합니다. 평등 점검을 할 때마다 숫자.


나는 당신이 여기에서 벗어난 것 같아요. OP가 부호없는 이진 표현에 대해 명확하게 이야기했을 때 부호 크기 표현에 대해 이야기하고 있습니다.
Joe Hass

1
부호없는 표현에 대해 이야기한다면 Two의 보수에 이점이 없습니다. 단순히 약간 낭비합니다.
Jack Aidley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.