Most programming languages interpret sequences of digits as base-10 numbers. Python adds syntax for the common alternate bases of binary, octal, and hexadecimal, which can be written with the prefixes 0b
, 0o
, and 0x
, respectively (as in 0b10010
= 18, 0o16
= 14, and 0xff
= 255). Clojure, however, is the only language I know that offers a built-in literal syntax for any base between 2 and 36.
To do so, it provides what is essentially an infix operator, r
. The digits to the left of the r
define the base (or radix), and the digits to the right define the number itself. For example, the binary, octal, and hexadecimal numbers given above can be expressed like this:
2r10010
18
8r16
14
16rff
255
Uppercase R
also works:
2R10010
18
For bases above 10, Clojure interprets letters as digits greater than nine, as is common with hexadecimal numbers, but it extends the scheme beyond F = 15:
17rG
16
That behavior reveals why radix literals only work up to base-36: the Latin alphabet only has 26 letters.
36rZ
35
In practice, I don't recall ever using any base other than binary, octal, or hexadecimal, but if you have, let me know.