Negabinary |
||||
|
'Negabinary' (radix -2) is a fairly obscure numeral system used in the experimental Poland computers SKRZAT 1[?] and BINEG[?] in 1950. It has the unusual property that negative and positive numbers can be represented without a sign bit, although arithmetic operations are more complicated.
HistoryNegative numerical bases where discovered by Vittorio Grunwald[?] in his work Giornale di Matematiche di Battaglini, published in 1885. Grunwald gave algorithms for performing addition, subtraction, multiplication, division, root extraction, divisibility tests, and radix conversion. Negative bases were later independently rediscovered A. J. Kempner in 1936 and Z. Pawlak and A. Wakulicz in 1959.
Radix ConversionThe number dx...d2d1d0, where dsomething is a digit 0 or 1, is equal to
The numbers from -5 to 5 are: -5 1111 -4 1100 -3 1101 -2 10 -1 11 0 0 1 1 2 110 3 111 4 100 5 101 6 11010(Note that 0 and the positive numbers have an odd number of bits, the negative numbers an even number of bits.) Numbers can be convered to negabinary by repeated division by -2, recording the remainder of 0 or 1. Note that if a / b = c, remainder d, then bc + d = a. For example: 13 / -2 = -6, remainder 1 -6 / -2 = 3, remainder 0 3 / -2 = -1, remainder 1 -1 / -2 = 1, remainder 1 1 / -2 = 0, remainder 1Therefore, 13 is 11101-2
AdditionTo add two negabinary numbers, start with a carry of 0, and, starting from the least significant bits[?], add the bit of each number plus the carry, record the bit of the resulting number and set the carry according to the number. Following is a table of the possible numbers, and what the bit and carry should be.
number bit carry
-2 0 1 (Note: -2 only occurs during subtraction.)
-1 1 1
0 0 0
1 1 0
2 0 -1
3 1 -1 (Note: 3 only occurs during addition.)
As an example, to add 1010101 (1+4+16+64 = 85) and 1110100 (4+16-32+64 = 52),
carry: 1 -1 0 -1 1 -1 0 0 0
first number: 1 0 1 0 1 0 1
second number: 1 1 1 0 1 0 0 +
--------------------------
number: 1 -1 2 0 3 -1 2 0 1
bit (result): 1 1 0 0 1 1 0 0 1
carry: 0 1 -1 0 -1 1 -1 0 0
so the result is 110011001 (1-8+16-128+256 = 137).
SubtractionTo subtract, multiply each bit of the second number by -1, and add the numbers.As an example, to compute 1101001 (1-8-32+64 = 25) minus 1110100 (4+16-32+64 = 52),
carry: 0 1 -1 1 0 0 0
first number: 1 1 0 1 0 0 1
second number: -1 -1 -1 0 -1 0 0 +
--------------------
number: 0 1 -2 2 -1 0 1
bit (result): 0 1 0 0 1 0 1
carry: 0 0 1 -1 1 0 0
so the result is 100101 (1+4-32 = -27) To negate a number, compute 0 minus the number.
Multiplication and DivisionShifting to the left multiplies by -2, shifting to the right divides by -2.To multiply, multiply like normal decimal or binary numbers, but using the negabinary rules for adding the carry, when adding the numbers.
first number: 1 1 1 0 1 1 0
second number: 1 0 1 1 0 1 1 *
-------------------------------------
1 1 1 0 1 1 0
1 1 1 0 1 1 0
1 1 1 0 1 1 0
1 1 1 0 1 1 0
1 1 1 0 1 1 0 +
-------------------------------------
carry: 0 -1 0 -1 -1 0 -2 -1 0 -1 0 0
number: 1 1 2 2 3 3 3 4 2 1 2 1 0
bit (result): 1 0 0 1 0 1 1 1 0 0 0 1 0
carry: 0 -1 0 -1 -1 0 -2 -1 0 -1 0 0
For each column, add carry to number, and divide the sum by -2, to get the new carry, and the resulting bit as the remainder. (TODO: Division by arbitrary numbers?)
Divisibility TestsTo be written.
Root ExtractionTo be written.See also binary, balanced ternary, numeral system.
External Resources
|
||||
Find your way back! |
||||