Values of intermediate multiplication typically need twice the number of bits as inputs.
// Example
int foo(int a, int b, int carry, int rem) {
int2x c;
The assumption that all *_MAX constants are of the form (2^n)-1
is valid. See 6.2.6 Representations of Types, and particularly 6.2.6.2 Integer types, where the representations of unsigned integer types and the positive values of signed integer types are fully defined as pure binary, thus yielding a maximum which is one less than a power of two.