Skew binary number system
The skew binary number system is a non-standard positional numeral system in which the nth digit contributes a value of times the digit instead of times as they do in binary. Each digit has a value of 0, 1, or 2. A number can have many skew binary representations. For example, a decimal number 15 can be written as 1000, 201 and 122. Each number can be written uniquely in skew binary canonical form where there is only at most one instance of the digit 2, which must be the least significant nonzero digit. In this case 15 is written canonically as 1000.
Examples
Canonical skew binary representations of the numbers from 0 to 15 are shown in following table:| Decimal | Binary | Skew Binary | Ternary |
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 |
| 3 | 11 | 10 | 10 |
| 4 | 100 | 11 | 11 |
| 5 | 101 | 12 | 12 |
| 6 | 110 | 20 | 20 |
| 7 | 111 | 100 | 21 |
| 8 | 1000 | 101 | 22 |
| 9 | 1001 | 102 | 100 |
| 10 | 1010 | 110 | 101 |
| 11 | 1011 | 111 | 102 |
| 12 | 1100 | 112 | 110 |
| 13 | 1101 | 120 | 111 |
| 14 | 1110 | 200 | 112 |
| 15 | 1111 | 1000 | 120 |
Arithmetical operations
The advantage of skew binary is that each increment operation can be done with at most one carry operation. This exploits the fact that. Incrementing a skew binary number is done by setting the only two to a zero and incrementing the next digit from zero to one or one to two. When numbers are represented using a form of run-length encoding as linked lists of the non-zero digits, incrementation and decrementation can be performed in constant time.Other arithmetic operations may be performed by switching between the skew binary representation and the binary representation.
Conversion between decimal and skew binary number
To convert from decimal to skew binary number, one can use the following formula:Base case:
Induction case:
Boundaries:
To convert from skew binary number to decimal, one can use the definition of a skew binary number:
, where, st. only least significant bit is 2.
C++ code to convert decimal number to skew binary number
- include
- include
- include
- include
long dp;
//Using formula a = 0; for n >= 1, a = a + 10^ for 0 <= i <= 2^n-1,
//taken from The On-Line Encyclopedia of Integer Sequences
long convertToSkewbinary
int main
C++ code to convert skew binary number to decimal number
- include
- include
// Decimal = * + * +...
// + * + *
//
// Expected input: A positive integer/long where digits are 0,1 or 2, s.t only least significant nonzero bit/digit is 2.
//
long convertToDecimal
int main
From skew binary representation to binary representation
Given a skew binary number, its value can be computed by a loop, computing the successive values of and adding it once or twice for each such that the th digit is 1 or 2 respectively. A more efficient method is now given, with only bit representation and one subtraction.The skew binary number of the form without 2 and with 1s is equal to the binary number minus. Let represents the digit repeated times. The skew binary number of the form with 1s is equal to the binary number minus.