Construct a BigInt from a decimal or hexadecimal string. The number must be in the form of a decimal or hex literal. It may have a leading + or - sign, followed by 0x or 0X if hexadecimal. Underscores are permitted in any location after the 0x and/or the sign of the number.
Construct a BigInt from a sign and a magnitude.
Construct a BigInt from a built-in integral type.
Construct a BigInt from another BigInt.
Gets the nth number in the underlying representation that makes up the whole BigInt.
Assignment from built-in integer types.
Assignment from another BigInt.
Implements binary operators between BigInts.
Implements binary operators between BigInt's and built-in integers.
Implements a narrowing remainder operation with built-in integer types.
Implements operators with built-in integers on the left-hand side and BigInt on the right-hand side.
Implements casting to bool.
Implements casting to integer types.
Implements casting to floating point types.
Implements casting to/from qualified BigInt's.
Implements 3-way comparisons of BigInt with BigInt or BigInt with built-in numeric types.
Implements BigInt equality test with other BigInt's and built-in numeric types.
Implements assignment operators from built-in integers of the form BigInt op= integer.
Implements assignment operators of the form BigInt op= BigInt.
Implements BigInt unary operators.
Convert the BigInt to string, passing it to the given sink.
Number of significant uints which are used in storing this number. The absolute value of this BigInt is always < 232*uintLength
Number of significant ulongs which are used in storing this number. The absolute value of this BigInt is always < 264*ulongLength
BigInt a = "9588669891916142"; BigInt b = "7452469135154800"; auto c = a * b; assert(c == BigInt("71459266416693160362545788781600")); auto d = b * a; assert(d == BigInt("71459266416693160362545788781600")); assert(d == c); d = c * BigInt("794628672112"); assert(d == BigInt("56783581982794522489042432639320434378739200")); auto e = c + d; assert(e == BigInt("56783581982865981755459125799682980167520800")); auto f = d + c; assert(f == e); auto g = f - c; assert(g == d); g = f - d; assert(g == c); e = 12345678; g = c + e; auto h = g / b; auto i = g % b; assert(h == a); assert(i == e); BigInt j = "-0x9A56_57f4_7B83_AB78"; BigInt k = j; j ^^= 11; assert(k ^^ 11 == j);
A struct representing an arbitrary precision integer.
All arithmetic operations are supported, except unsigned shift right (>>>). Bitwise operations (|, &, ^, ~) are supported, and behave as if BigInt was an infinite length 2's complement number.
BigInt implements value semantics using copy-on-write. This means that assignment is cheap, but operations such as x++ will cause heap allocation. (But note that for most bigint operations, heap allocation is inevitable anyway.)