3 초과 부호
1. 개요
3 초과 코드는 각 십진수 자릿수에 3을 더한 후 4비트 이진수로 표현하는 방식이다. 이 코드는 가중치가 없는 코드이며, 자기 보수 성질을 가져 9의 보수를 쉽게 얻을 수 있어 뺄셈 연산에 용이하다. 3 초과 코드는 메모리나 전송 라인의 오류 감지에 활용될 수 있으며, 데이터 전송을 위해 3-of-6 코드 또는 4-of-8 코드로 확장될 수 있다.
| 이름 | Stibitz 코드 |
|---|---|
| 다른 이름 | 3-초과 코드 (Excess-3 code) |
| 자릿수 | 4 |
|---|---|
| 트랙 | 4 |
| 가중치 | 8 4 |
| 가중치 범위 | 1..3 |
| 연속성 | 아니오 |
| 순환성 | 아니오 |
| 최소 거리 | 1 |
| 최대 거리 | 4 |
| 중복성 | 0.7 |
| 어휘 편찬 | 1 |
| 보수 | 9 |
2. 표현
3 초과 코드는 각 십진수 자릿수에 3을 더한 후, 그 결과를 4비트 이진수로 표현하는 방식이다. 3 초과 코드는 가중치가 없는 코드(non-weighted code)로, 각 비트가 특정 값을 나타내지 않는다. 가장 작은 이진수는 가장 작은 값을, 가장 큰 이진수는 가장 큰 값을 나타낸다.
| 십진수 | 3 초과 | BCD 8-4-2-1 | 이진수 |
|---|---|---|---|
| 0 | 0011 | 0000 | 0000 |
| 1 | 0100 | 0001 | 0001 |
| 2 | 0101 | 0010 | 0010 |
| 3 | 0110 | 0011 | 0011 |
| 4 | 0111 | 0100 | 0100 |
| 5 | 1000 | 0101 | 0101 |
| 6 | 1001 | 0110 | 0110 |
| 7 | 1010 | 0111 | 0111 |
| 8 | 1011 | 1000 | 1000 |
| 9 | 1100 | 1001 | 1001 |
예를 들어 127을 3 초과 코드로 나타내려면, 각 자릿수를 변환하여 0100, 0101, 1010을 얻는다.
3. 연산
3 초과 코드의 산술 연산은 일반적인 BCD 또는 이진 연산과는 다른 알고리즘을 사용한다. 두 개의 3 초과 숫자를 더하면, 결과는 6 초과 코드가 된다. 예를 들어, 1 (3 초과 코드로 0100)과 2 (3 초과 코드로 0101)을 더하면, 결과는 3 (3 초과 코드로 0110)이 아니라 6 (3 초과 코드로 1001)이 된다. 덧셈 결과에서 3을 빼거나 (결과 자릿수가 10보다 작을 때), 13을 빼서 (자리 올림이 발생했을 때) 올바른 3 초과 코드 값을 얻을 수 있다.
4. 장점
3 초과 코드의 가장 큰 장점은 자기 보수 성질이다. 즉, 모든 비트를 반전시켜 9의 보수를 쉽게 얻을 수 있다는 점이다. 이는 뺄셈 연산을 간단하게 만들어 준다. 두 3 초과 숫자의 합이 9보다 크면, 4비트 가산기의 캐리 비트가 1이 된다. 또한 0000과 1111 코드는 사용되지 않으므로, 메모리나 전송 라인의 오류를 감지하는 데 활용될 수 있다.
5. 확장
3 초과 코드는 데이터 전송을 위해 6비트 또는 8비트 코드로 확장될 수 있다.
* 3-of-6 코드 확장: 6비트 중 3비트가 1인 코드이다.
* 4-of-8 코드 확장: 8비트 중 4비트가 1인 코드이며, 해밍 거리를 증가시켜 오류 검출 능력을 향상시킬 수 있다. IBM 트랜시버 코드의 대안으로 사용되기도 한다.
6. BCD 8-4-2-1에서 3 초과 코드로 변환 예시
vhdl
entity bcd8421xs3 is
port (
a : in std_logic;
b : in std_logic;
c : in std_logic;
d : in std_logic;
an : buffer std_logic;
bn : buffer std_logic;
cn : buffer std_logic;
dn : buffer std_logic;
w : out std_logic;
x : out std_logic;
y : out std_logic;
z : out std_logic
);
end entity bcd8421xs3;
architecture dataflow of bcd8421xs3 is
begin
an <= not a;
bn <= not b;
cn <= not c;
dn <= not d;
w <= (an and b and d ) or (a and bn and cn)
or (an and b and c and dn);
x <= (an and bn and d ) or (an and bn and c and dn)
or (an and b and cn and dn) or (a and bn and cn and d);
y <= (an and cn and dn) or (an and c and d )
or (a and bn and cn and dn);
z <= (an and dn) or (a and bn and cn and dn);
end architecture dataflow; -- of bcd8421xs3