서명된 번호 표시

Signed number representations

컴퓨팅에서 이진수 시스템에서 음수를 인코딩하려면 부호화된 숫자 표현이 필요합니다.

수학에서, 모든 밑변의 음수는 음수 기호("-")를 앞에 붙임으로써 표현됩니다.그러나 컴퓨터 하드웨어에서 숫자는 추가 기호 없이 비트의 시퀀스로만 표현됩니다.부호 있는 숫자를 나타내기 위해 이진수 체계를 확장하는 네 가지 가장 잘 알려진 방법은 부호 크기, 1의 보, 2의 보, 그리고 오프셋 이진수이다.대체 방법 중 일부는 -2를 사용하여 음의 이진법 등 명시적 기호 대신 암묵적 기호를 사용합니다.이러한 주제에 대한 긍정, 부정, 부분 또는 기타 세부사항 등 다른 근거에 대해 대응하는 방법을 고안할 수 있다.

그 어떤 표현도 보편적으로 우월하다는 명확한 기준은 없다.정수의 경우, Unisys ClearPath Dorado 시리즈 메인프레임은 1개의 보를 사용하지만, 대부분의 현재 컴퓨팅 장치에서 사용되는 표현은 2의 보입니다.

역사

디지털 컴퓨팅의 초창기에는 하드웨어 기술과 수학 기술(숫자 시스템) 양쪽에 대한 경쟁적인 아이디어로 특징지어졌습니다.가장 큰 논쟁 중 하나는 부정적인 숫자의 형식이었고, 그 시대의 최고 전문가들 중 일부는 매우 강하고 다른 [citation needed]의견을 표현했다.한 진영은 오늘날 지배적인 시스템인 두 진영의 보완을 지지했다.또 다른 캠프는 양의 등가 비트를 모두 반전시켜 음의 값을 형성하는 보정을 지지했다.세 번째 그룹은 단어의 최상위 비트를 전환하는 것만으로 값이 양수에서 음수로 변경되는 부호 크기를 지원했습니다.

각각의 시스템에 대한 찬반 논쟁이 있었다.작은 수치에는 1비트가 적게 사용되므로 부호 크기를 사용하면 메모리 덤프(1960년대 일반적인 프로세스)를 쉽게 추적할 수 있습니다.이 시스템은 내부적으로 한 사람의 보완수학을 수행했기 때문에, 레지스터에서 수학 단위로 전송될 때 숫자를 한 사람의 보완값으로 변환하고, 그 결과가 레지스터로 다시 전송될 때 다시 부호 크기로 변환해야 했다.다른 시스템보다 더 많은 게이트가 필요했는데, 이는 이산 트랜지스터의 비용과 패키징이 중요할 때 가장 중요한 문제였습니다.IBM은 704, 709709x 시리즈 컴퓨터가 아마도 이것을 사용하는 가장 잘 알려진 시스템인 만큼 초기에 간판 크기를 지지한 회사 중 하나였습니다.

수학단위를 주고받을 때 값을 변환할 필요가 없어 하드웨어 설계를 단순화할 수 있었다.그러나 그것은 또한 의 영(-0)을 나타낼 수 있는 능력이라는 부호 규모와 바람직하지 않은 특성을 공유했다.음의 0은 양의 0과 똑같이 동작합니다.어떤 계산에서 피연산자로 사용될 경우 피연산자가 양의 0이든 음의 0이든 결과는 동일합니다.단점은 같은 값의 두 형식이 존재하기 때문에 0과 동일함을 확인할 때 두 가지 비교가 필요하다는 것입니다.보충 차감(아래 설명)을 통해 최종 차입이 발생할 수도 있다.이것은 덧셈과 뺄셈 논리를 더 복잡하게 하거나 더 쉽게 한다고 주장할 수 있다. 뺄셈은 덧셈에 전달될 때 두 번째 피연산자의 비트를 단순히 반전시킬 필요가 있기 때문이다.PDP-1, CDC 160 시리즈, CDC 3000 시리즈, CDC 6000 시리즈, UNIVAC 1100 시리즈 및 LINC 컴퓨터에서는 보형 표현을 사용합니다.

Two의 보완은 하드웨어에서 구현하기 가장 쉬우며, 이것이 광범위한 [1]인기의 궁극적인 이유일 수 있습니다.초기 메인프레임의 프로세서는 수천 개의 트랜지스터로 구성되는 경우가 많았기 때문에 상당한 수의 트랜지스터를 제거하면 상당한 비용 절감 효과가 있었습니다.IBM System/360, GE-600 시리즈,[2] PDP-6PDP-10과 같은 메인프레임에는 2개의 보완 장치가 사용되며, PDP-5PDP-8과 같은 미니컴퓨터와 PDP-11 및 VAX 시스템도 마찬가지입니다.초기 집적회로 기반 CPU(Intel 8080 등)의 설계자들도 2의 보완연산을 선택했습니다.IC 기술이 발전함에 따라 x86,[3] m68k, Power [4]ISA, MIPS, SPARC, ARM, Itanium, PA-RISC DEC Alpha를 포함한 거의 모든 프로세서에서 2개의 보완 기술이 채택되었습니다.

매그니튜드

매그니튜드 8비트
이진수 값 부호 크기 해석 부호 없는 해석
00000000 0 0
00000001 1 1
01111101 125 125
01111110 126 126
01111111 127 127
10000000 −0 128
10000001 −1 129
10000010 −2 130
11111101 −125 253
11111110 −126 254
11111111 −127 255

부호 크기 또는 부호 매그니튜드라고도 불리는 부호 크기 표현에서 부호 번호는 부호 비트의 숫자 기호(종종 가장 유의한 비트, 양수의 경우 0으로, 음수의 경우 1로 설정)에 대응하는 비트 패턴 및 숫자(또는 절대값)의 크기에 의해 표시됩니다.나머지 비트예를 들어, 8비트 바이트에서는 7비트만 크기를 나타냅니다. 범위는 0000000(0) ~ 1111111(127)입니다.따라서 부호 비트(8번째 비트)가 추가되면 -12710 ~ +12710 범위의 숫자를 나타낼 수 있습니다.예를 들어 8비트바이트로 인코딩된 -43은10 10101011이고 43은10 00101011입니다.부호 크기 표현을 사용하면 다음과 같은 여러 가지 결과가 발생하므로 [5]구현이 더욱 복잡해진다.

  1. 0을 나타내는 방법에는 00000000(0)과 10000000(-0)의 2가지가 있습니다.
  2. 덧셈과 뺄셈은 부호 비트에 따라 다른 동작이 필요한 반면, 하나의 보수는 부호 비트를 무시하고 끝자리만 수행할 수 있고, 두 개의 보수는 부호 비트를 무시하고 오버플로 동작에 의존할 수 있습니다.
  3. 비교에는 부호 비트를 검사해야 하지만, 2의 보완에서는 단순히 두 숫자를 빼고 결과가 양수인지 음수인지를 확인할 수 있습니다.
  4. 2의 보수의 경우 최소 음수는 -128 대신 -127입니다.

이 방법은 기호를 표시하는 일반적인 방법(숫자의 크기 옆에 "+" 또는 "-"를 배치)과 직접 비교됩니다.일부 초기 이진 컴퓨터(예: IBM 7090)는 일반적인 사용과의 자연스러운 관계 때문에 이 표현을 사용합니다.부호 크기는 유의점을 부동소수점 값으로 표현하는 가장 일반적인 방법입니다.

보충물

8비트 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
11111101 −2 253
11111110 −1 254
11111111 −0 255

음수는 정수의 비트 단위 [6]NOT(즉 '완성')에 대응하는 비트 패턴으로 나타난다.한 사람의 보수는 0: 0000000000(+0)과 111111(-0)[7]의 두 가지 표시로 표시된다.

예를 들어 001011(43)의10 보완 형태는 11010100(-4310)이 된다.1의 보수를 사용한 서명된 숫자의 범위는 -(2N−1 - 1) ~ (2N−1 - 1) 및 ±0으로 나타낸다.기존의 8비트바이트는 -12710~+127이며10, 0은 00000000(+0) 또는 111111(-0) 중 하나입니다.

이 시스템에서 표현되는 두 숫자를 더하려면 기존 이진수 덧셈을 수행하지만, 그런 다음 엔드 어라운드 자리 매김을 수행해야 합니다. 즉, 결과 자리 매김을 결과 [8]합계에 추가해야 합니다.이것이 필요한 이유를 확인하려면 +2(00000010)에 -1(1111110)을 추가하는 예를 다음에 나타냅니다.

이진수 10진수 111110 -1 + 00000010 + 2 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

앞의 예에서 첫 번째 이진수 덧셈은 00000000을 나타내지만 이는 올바르지 않습니다.올바른 결과(00000001)는 캐리어가 다시 추가되었을 때만 표시됩니다.

용어 해설:이 시스템은 양의 을 부정하기 때문에 "보완"이라고 불립니다.x(비트로 나타남)x)를 빼서 형성할 수도 있습니다.x긴 수열인 0의 1의 보형 표현으로부터 나온 것입니다.반면, 2의 보완 산술은 부정을 형성한다.x빼서x+[9]0에 해당하는 2의 단일 큰 제곱으로부터.따라서 같은 음의 값을 가진 한 사람의 보완표현과 두 사람의 보완표현은 각각 다를 것이다.

음수에 대한 1개의 보완 표현은 단순히 비트 단위로 크기를 보완하는 것(첫 번째 이후의 모든 비트를 반전시키는 것)만으로 부호 크기 표현에서 얻을 수 있습니다.예를 들어, 10진수 -125와 그 부호 크기 11111101은 10000010으로 보형될 수 있다.

2의 보완

8비트 2의 보완
이진수 값 2의 보어 해석 부호 없는 해석
00000000 0 0
00000001 1 1
01111110 126 126
01111111 127 127
10000000 −128 128
10000001 −127 129
10000010 −126 130
11111110 −2 254
11111111 −1 255

2개의 보완표현에서 음수는 정수의 비트수 NOT(즉 '완전')에 대응하는 비트 패턴, 즉 1개의 보완+1에 대응한 비트 패턴으로 나타난다.이는 0의 다중 표현과 1의 보완 표현에 대한자리 매김의 필요성을 회피한다.이것은 부호 없는 정수에서 값의 역수를 나타내는 최상위 비트로 생각할 수도 있습니다. 8비트 부호 없는 바이트에서 최상위 비트는 128번째 자리를 나타냅니다. 여기서 2의 보수로 비트는 -128을 나타냅니다.

2의 보완에서는 00000000으로 표시되는 0이 하나만 있습니다.수치(음수든 양수든)를 부정하려면 모든 비트를 반전시킨 다음 [10]그 결과에 1을 추가합니다.이는 실제로 모든 정수 모듈N 2의 링 구조합니다 / Z \ { } / { N } \ { 。2's completment 정수쌍의 덧셈은 부호 없는 숫자의 쌍(오버플로우 검출이 이루어진 경우 제외)의 덧셈과 같으며, 짝수 감산도 같습니다.제품의 서쪽 유의 비트(곱셈 값).예를 들어, 2의 보완 덧셈 127과 -128은 8비트 2의 보완 테이블에서 볼 수 있듯이 127과 128의 부호 없는 덧셈과 동일한 이진 비트 패턴을 제공합니다.

2의 보수의 부정을 얻는 더 쉬운 방법은 다음과 같습니다.

예 1 예 2
1. 오른쪽부터 첫 번째 '1'을 찾습니다. 00101001 00101100
2. 모든 비트를 해당 "1"의 왼쪽으로 반전시킵니다. 11010111 11010100

방법 2:

  1. 숫자를 통해 모든 비트를 반전합니다.
  2. 1개 추가

예: 바이너리 단위로 00000010인 +2의 경우(~ 문자는 C 비트 단위 NOT 연산자이므로 ~X는 "X의 모든 비트를 반전"을 의미합니다).

  1. ~00000010 → 11111101
  2. 11111101 + 1 → 111110 (-2's complete)

오프셋 바이너리

8비트 초과-128
이진수 값 초과 128 해석 부호 없는 해석
00000000 −128 0
00000001 −127 1
01111111 −1 127
10000000 0 128
10000001 1 129
11111111 127 255

오버K 또는 바이어스라고도 불리는 오프셋 바이너리 표현에서 부호화된 숫자는 부호 없는 숫자 플러스(+)에 대응하는 비트 패턴으로 표현된다.K,와 함께K바이어싱또는 오프셋입니다.따라서 0은 다음과 같이 표시됩니다.K, 및 -K 는 모두 제로 비트 패턴으로 나타납니다.이는 앞에서 언급한 두 개의 보완을 약간 수정하고 일반화한 것으로 볼 수 있으며, 이는 사실상 최상위 비트를 가진 초과-(2N−1) 표현입니다.

현재는 부동소수점 숫자의 지수에 주로 편향된 표현이 사용됩니다.IEEE 754 부동소수점 표준에서는 단정도(32비트) 숫자의 지수 필드를 8비트 초과-127 필드로 정의하고 있습니다. 정밀도(64비트) 지수 필드는 11비트 초과 1023 필드입니다.지수 바이어스를 참조해 주세요.또한 이진 코드화된 10진수를 초과 3으로 사용하였습니다.

베이스 -2

8비트 베이스 - 2
이진수 값 기준 -2 해석 부호 없는 해석
00000000 0 0
00000001 1 1
01111111 43 127
10000000 −128 128
10000001 −127 129
11111111 −85 255

기저 -2 표현에서는 부호화된 번호가 기저 -2의 수계를 이용해 표현된다.기존 이진수 시스템에서는 베이스 또는 기수는 2이므로 맨 오른쪽 비트는 2를 나타내고 다음 비트는 22, 다음 비트는0 2를1 나타냅니다.그러나 베이스가 -2인 이진수 체계도 가능합니다.맨 오른쪽 비트는 (-2)0 = +1, 다음 비트는 (-2)1 = -2, 다음 비트(-2)2 = +4 등을 번갈아 기호로 나타냅니다.4비트로 나타낼 수 있는 숫자는 아래 비교표에 나와 있습니다.

나타낼 수 있는 숫자의 범위는 비대칭입니다.단어에 짝수 비트가 있는 경우 표현 가능한 최대 음수의 크기는 표현 가능한 최대 양의 2배이며, 홀수 비트의 경우 그 반대의 경우도 마찬가지입니다.

비교표

다음 표는 4비트를 사용하여 나타낼 수 있는 양의 정수 및 음의 정수를 보여 줍니다.

4비트 정수 표현
십진수 서명 없음 매그니튜드 보충물 2의 보완 초과-8(바이어스) 베이스 -2
16
15 1111
14 1110
13 1101
12 1100
11 1011
10 1010
9 1001
8 1000
7 0111 0111 0111 0111 1111
6 0110 0110 0110 0110 1110
5 0101 0101 0101 0101 1101 0101
4 0100 0100 0100 0100 1100 0100
3 0011 0011 0011 0011 1011 0111
2 0010 0010 0010 0010 1010 0110
1 0001 0001 0001 0001 1001 0001
0 0000 0000 0000 0000 1000 0000
−0 1000 1111
−1 1001 1110 1111 0111 0011
−2 1010 1101 1110 0110 0010
−3 1011 1100 1101 0101 1101
−4 1100 1011 1100 0100 1100
−5 1101 1010 1011 0011 1111
−6 1110 1001 1010 0010 1110
−7 1111 1000 1001 0001 1001
−8 1000 0000 1000
−9 1011
−10 1010
−11

"이러한 바이너리 비트가 주어진 경우, 표현 시스템에 의해 해석되는 숫자는?"에서 본 것과 같은 표입니다.

바이너리 서명 없음 매그니튜드 보충물 2의 보완 초과-8 베이스 -2
0000 0 0 0 0 −8 0
0001 1 1 1 1 −7 1
0010 2 2 2 2 −6 −2
0011 3 3 3 3 −5 −1
0100 4 4 4 4 −4 4
0101 5 5 5 5 −3 5
0110 6 6 6 6 −2 2
0111 7 7 7 7 −1 3
1000 8 −0 −7 −8 0 −8
1001 9 −1 −6 −7 1 −7
1010 10 −2 −5 −6 2 −10
1011 11 −3 −4 −5 3 −9
1100 12 −4 −3 −4 4 −4
1101 13 −5 −2 −3 5 −3
1110 14 −6 −1 −2 6 −6
1111 15 −7 −0 −1 7 −5

기타 시스템

구글의 프로토콜 버퍼 "지그재그 부호화"는 부호 규모와 유사하지만 부호 표시에 가장 낮은 비트를 사용하며 0의 단일 표현을 가지고 있다.이를 통해 부호화되지 않은(부호화되지 않은) 정수를 위한 가변 길이 수량 인코딩을 부호화된 [11]정수에 효율적으로 사용할 수 있습니다.

고도의 비디오 부호화/H.264 고효율 비디오 부호화/H.265 비디오 압축 표준에서도 같은 방법을 사용하여 지수 골롬 부호화를 음수로 확장합니다.이 확장에서 최하위 비트는 거의 부호 비트입니다. 0은 모든 음수와 동일한 최하위 비트(0)를 가집니다.이 선택에 의해 2의 보완이나 Protocol Buffers 지그재그 부호화와는 달리 가장 큰 진폭의 양수가 가장 큰 진폭의 음수보다 1이 커집니다.

또 다른 접근법은 각 숫자에 부호를 부여하여 부호 있는 숫자를 표시하는 것입니다.를 들어, 1726년에 존 콜슨은 "작은 숫자", 숫자 1, 2, 3, 4, 5로 식을 줄이는 것을 지지했다.1840년, Augustin Cauchy는 계산 오류를 줄이기 위해 수정된 10진수를 선호한다고 표현했다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Choo, Hunsoo; Muhammad, K.; Roy, K. (February 2003). "Two's complement computation sharing multiplier and its applications to high performance DFE". IEEE Transactions on Signal Processing. 51 (2): 458–469. doi:10.1109/TSP.2002.806984.
  2. ^ GE-625 / 635 Programming Reference Manual. General Electric. January 1966. Retrieved August 15, 2013.
  3. ^ Intel 64 and IA-32 Architectures Software Developer's Manual (PDF). Intel. Section 4.2.1. Retrieved August 6, 2013.
  4. ^ Power ISA Version 2.07. Power.org. Section 1.4. Retrieved August 6, 2013.,
  5. ^ Bacon, Jason W. (2010–2011). "Computer Science 315 Lecture Notes". Retrieved 21 February 2020.
  6. ^ US 4484301, "어레이 멀티플라이어(어레이 멀티플라이어)" 1981-03-10 발행
  7. ^ US 6760440, "One's complete compliner", 1999-12-11 발행
  8. ^ Shedletsky, John J. (1977). "Comment on the Sequential and Indeterminate Behavior of an End-Around-Carry Adder". IEEE Transactions on Computers. 26 (3): 271–272. doi:10.1109/TC.1977.1674817.
  9. ^ 도널드 크누스:컴퓨터 프로그래밍기술, 제2권: 세미컨슈머 알고리즘, 4.1장
  10. ^ Thomas Finley (April 2000). "Two's Complement". Cornell University. Retrieved 15 September 2015.
  11. ^ 프로토콜 버퍼: 부호 있는 정수
  • Ivan Flores, 컴퓨터 산수의 논리, 프렌티스 홀(1963년)
  • 이스라엘 코렌, 컴퓨터 산술 알고리즘, A.K. 피터스(2002), ISBN 1-56881-160-8