| Numeral systems by culture |
| Hindu-Arabic numerals |
Western Arabic
Eastern Arabic
Khmer |
Indian family
Brahmi
Thai |
| East Asian numerals |
Chinese
Suzhou
Counting rods |
Japanese
Korean |
| Alphabetic numerals |
Abjad
Armenian
Cyrillic
Ge'ez |
Hebrew
Greek (Ionian)
Āryabhaṭa
|
| Other systems |
Attic
Babylonian
Egyptian
English |
Etruscan
Mayan
Roman
Urnfield |
| List of numeral system topics |
| Positional systems by base |
| Decimal (10) |
| 2, 4, 8, 16, 32, 64 |
| 1, 3, 9, 12, 20, 24, 30, 36, 60, more… |
|
|
Base 36 is a positional numeral system using 36 as the radix. The choice of 36 is convenient in that the digits can be represented using the Arabic numerals 0-9 and the Latin letters A-Z. Base 36 is therefore the most compact case-insensitive alphanumeric numeral system using ASCII characters, although its radix economy is poor. (Compare with base 16 and base 64.)
From a mathematical viewpoint, 36 is a convenient choice for a base in that it is divisible by both 2 and 3, and by their multiples 4, 6, 9, 12 and 18. Each base 36 digit can be represented as two base 6 digits.
The most common latinate name for base 36 seems to be hexatridecimal, although sexatrigesimal would arguably be more correct. The intermediate form hexatrigesimal is also sometimes used. For more background on this naming confusion, see the entry for hexadecimal. Another name occasionally seen for base 36 is alphadecimal, a neologism coined based on the fact that the system uses the decimal digits and the letters of the Latin alphabet.
Examples
Conversion table:
| Decimal |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
| Base 36 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
G |
H |
| |
| Decimal |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
| Base 36 |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
Some numbers in decimal and base 36:
| Decimal |
Base 36 |
| 1 |
1 |
| 10 |
A |
| 100 |
2S |
| 1,000 |
RS |
| 10,000 |
7PS |
| 100,000 |
255S |
| 1,000,000 |
LFLS |
| 1,000,000,000 |
GJDGXS |
| 1,000,000,000,000 |
CRE66I9S |
| Base 36 |
Decimal |
| 1 |
1 |
| 10 |
36 |
| 100 |
1,296 |
| 1000 |
46,656 |
| 10000 |
1,679,616 |
| 100000 |
60,466,176 |
| 1000000 |
2,176,782,336 |
| 10000000 |
78,364,164,096 |
| 100000000 |
2,821,109,907,456 |
| Fraction |
Decimal |
Base 36 |
| 1/2 |
0.5 |
0.I |
| 1/3 |
0.333333333333… |
0.C |
| 1/4 |
0.25 |
0.9 |
| 1/5 |
0.2 |
0.777777777777… |
| 1/6 |
0.166666666666… |
0.6 |
| 1/7 |
0.142857142857… |
0.555555555555… |
| 1/8 |
0.125 |
0.4I |
| 1/9 |
0.111111111111… |
0.4 |
| 1/10 |
0.1 |
0.3LLLLLLLLLLL... |
Conversion
32- and 64-bit integers will only hold up to 6 or 12 base-36 digits, respectively. For numbers with more digits, one can use the functions mpz_set_str and mpz_get_str in the GMP arbitrary-precision math library. For floating-point numbers the corresponding functions are called mpf_set_str and mpf_get_str.
Python Conversion Code
def base36decode(input):
CLIST="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
rv = pos = 0
charlist = list(input)
charlist.reverse()
for char in charlist:
rv += CLIST.find(char) * 36**pos
pos += 1
return rv
def base36encode(input):
CLIST="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
rv = ""
while input != 0:
rv = CLISTinput % 36 + rv
input /= 36
return rv
print base36decode("AQF8AA0006EH")
print base36encode(1412823931503067241)
Uses in practice
The Remote Imaging Protocol for bulletin board systems used base 36 notation for transmitting coordinates in a compact form. Many URL redirection systems like TinyURL also use base 36 integers as compact alphanumeric identifiers. Various systems such as RickDate use base 36 as a compact representation of Gregorian dates in file names, using one digit each for the day and the month.
References
External links
|