Template:Short description Template:Redir Template:Redir Template:Use dmy dates Template:Infobox code

Excess-3, 3-excess<ref name="Steinbuch_1962"/><ref name="Steinbuch-Weber_1974"/><ref name="Richards_1955"/> or 10-excess-3 binary code (often abbreviated as XS-3,<ref name="Kautz_1954"/> 3XS<ref name="Steinbuch_1962"/> or X3<ref name="Schmid_1974"/><ref name="Schmid_1983"/>), shifted binary<ref name="Stibitz_1957"/> or Stibitz code<ref name="Steinbuch_1962"/><ref name="Steinbuch-Weber_1974"/><ref name="Dokter_1973"/><ref name="Dokter_1975"/> (after George Stibitz,<ref name="Stibitz_1941"/> who built a relay-based adding machine in 1937<ref name="Mietke_2017"/><ref name="Ritchie_1986"/>) is a self-complementary binary-coded decimal (BCD) code and numeral system. It is a biased representation. Excess-3 code was used on some older computers as well as in cash registers and hand-held portable electronic calculators of the 1970s, among other uses.

RepresentationEdit

Biased codes are a way to represent values with a balanced number of positive and negative numbers using a pre-specified number N as a biasing value. Biased codes (and Gray codes) are non-weighted codes. In excess-3 code, numbers are represented as decimal digits, and each digit is represented by four bits as the digit value plus 3 (the "excess" amount):

  • The smallest binary number represents the smallest value (Template:Nobr).
  • The greatest binary number represents the largest value (Template:Nobr).
Excess-3, and Stibitz code
Decimal Excess-3 Stibitz BCD 8-4-2-1 Binary 3-of-6 CCITT
extension<ref name="CCITT_1959"/><ref name="Steinbuch_1962"/>
4-of-8 Hamming
extension<ref name="Steinbuch_1962"/>
0 0011 0011 0000 0000 10 0011
1 0100 0100 0001 0001 11 1011
2 0101 0101 0010 0010 10 0101
3 0110 0110 0011 0011 10 0110
4 0111 0111 0100 0100 00 1000
5 1000 1000 0101 0101 11 0111
6 1001 1001 0110 0110 10 1001
7 1010 1010 0111 0111 10 1010
8 1011 1011 1000 1000 00 0100
9 1100 1100 1001 1001 10 1100

To encode a number such as 127, one simply encodes each of the decimal digits as above, giving (0100, 0101, 1010).

Excess-3 arithmetic uses different algorithms than normal non-biased BCD or binary positional system numbers. After adding two excess-3 digits, the raw sum is excess-6. For instance, after adding 1 (0100 in excess-3) and 2 (0101 in excess-3), the sum looks like 6 (1001 in excess-3) instead of 3 (0110 in excess-3). To correct this problem, after adding two digits, it is necessary to remove the extra bias by subtracting binary 0011 (decimal 3 in unbiased binary) if the resulting digit is less than decimal 10, or subtracting binary 1101 (decimal 13 in unbiased binary) if an overflow (carry) has occurred. (In 4-bit binary, subtracting binary 1101 is equivalent to adding 0011 and vice versa.)<ref>Template:Cite book</ref>


AdvantageEdit

The primary advantage of excess-3 coding over non-biased coding is that a decimal number can be nines' complemented<ref name="Steinbuch_1962"/> (for subtraction) as easily as a binary number can be ones' complemented: just by inverting all bits.<ref name="Steinbuch_1962"/> Also, when the sum of two excess-3 digits is greater than 9, the carry bit of a 4-bit adder will be set high. This works because, after adding two digits, an "excess" value of 6 results in the sum. Because a 4-bit integer can only hold values 0 to 15, an excess of 6 means that any sum over 9 will overflow (produce a carry-out).

Another advantage is that the codes 0000 and 1111 are not used for any digit. A fault in a memory or basic transmission line may result in these codes. It is also more difficult to write the zero pattern to magnetic media.<ref name="Steinbuch_1962"/><ref name="Bashe_1956"/><ref name="Mietke_2017"/>

ExampleEdit

BCD 8-4-2-1 to excess-3 converter example in VHDL: <syntaxhighlight lang="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 </syntaxhighlight>

ExtensionsEdit

Template:Infobox code Template:Infobox code

  • 3-of-6 code extension: The excess-3 code is sometimes also used for data transfer, then often expanded to a 6-bit code per CCITT GT 43 No. 1, where 3 out of 6 bits are set.<ref name="CCITT_1959"/><ref name="Steinbuch_1962"/>
  • 4-of-8 code extension: As an alternative to the IBM transceiver code<ref name="IBM_Transceiver"/> (which is a 4-of-8 code with a Hamming distance of 2),<ref name="Steinbuch_1962"/> it is also possible to define a 4-of-8 excess-3 code extension achieving a Hamming distance of 4, if only denary digits are to be transferred.<ref name="Steinbuch_1962"/>

See alsoEdit

ReferencesEdit

Template:Reflist