Why "exact past 2^53" is worth calling out#
JavaScript's regular numbers are IEEE 754 doubles, which can only represent integers exactly up to 2^53 (about 9 quadrillion). A naive base converter built on parseInt() and .toString(base) silently loses precision past that point — the input and output stop matching without any error or warning. This tool parses and converts using BigInt arithmetic instead, so a 64-bit value like a hash fragment or a large ID converts exactly, no matter how many digits it has.
Why the source base goes up to 36, not just 16#
Binary, octal, decimal and hex (bases 2, 8, 10, 16) cover the vast majority of real use, but any base up to 36 is supported because that is the natural ceiling: base 36 uses every digit 0-9 plus every letter a-z, and there are no more single-character symbols left after that. Bases above 10 reuse letters as digits — base 16 uses a-f, base 36 uses a-z — matching the same convention used by URL shorteners and compact ID encodings.
A note on negative numbers#
A leading minus sign is preserved through the conversion — "-255" in decimal converts to "-ff" in hex, not to a two's-complement bit pattern. This matches how the number would be written in code or in most other reference converters, rather than how it would be stored in a fixed-width binary register.