Int128: Portable and Performant 128-bit integers
Matt Borland
Description
Boost.Int128 is a portable implementation of a signed, and an unsigned 128-bit integer and related functionality (i.e. <bit>, <iostream>, etc).
Importantly, on all platforms, the sizeof the types provided in this library are exactly 128-bits.
The library is header-only, has no dependencies, and requires only C++14.
When using C++20 or newer, the library can be consumed as a module import boost.int128.
Motivation
128-bit integers are useful across many domains, but C++ provides no portable way to use them.
GCC and Clang offer __int128 as a non-standard extension on 64-bit targets, but it lacks std::numeric_limits specializations, <iostream> support, and is absent entirely on MSVC.
Multiprecision libraries can fill the gap, but typically at the cost of a larger sizeof and additional overhead.
Boost.Int128 solves this by providing types that are exactly 128-bits on every platform.
Operation implementations rely on compiler intrinsic where available for native performance, and optimized software implementations elsewhere.
Use Cases
-
Networking — IPv6 addresses are 128 bits wide; a single integer makes masking, comparison, and arithmetic straightforward.
-
Unique identifiers — UUIDs / GUIDs are 128-bit values commonly used as database keys and distributed system identifiers.
-
Scientific and Financial computing — Extended-range accumulators, large combinatorial values, and algorithms that need overflow-free 64×64 multiplication.
Supported Compilers
Boost.Int128 is tested natively on Ubuntu (x86_64, x86_32, s390x, aarch64, ARM32v7), macOS (x86_64, and Apple Silicon), and Windows (x86_64, x86_32, and ARM64); as well as emulated PPC64LE using QEMU with the following compilers:
-
GCC 5 and later
-
Clang 5 and later
-
Visual Studio 2017 (14.1) and later
-
Intel OneAPI DPC++ 2024.2 and later
Tested on Github Actions and Drone. Coverage can be found on Codecov.