![]() |
Bitcoin Core 31.0.0
P2P Digital Currency
|
256-bit unsigned big integer. More...
#include <arith_uint256.h>
Friends | |
| uint256 | ArithToUint256 (const arith_uint256 &) |
| arith_uint256 | UintToArith256 (const uint256 &) |
Additional Inherited Members | |
Protected Attributes inherited from base_uint< 256 > | |
| uint32_t | pn [WIDTH] |
| Big integer represented with 32-bit digits, least-significant first. | |
Static Protected Attributes inherited from base_uint< 256 > | |
| static constexpr int | WIDTH |
256-bit unsigned big integer.
Definition at line 230 of file arith_uint256.h.
|
constexprdefault |
Definition at line 234 of file arith_uint256.h.
Definition at line 235 of file arith_uint256.h.
Definition at line 195 of file arith_uint256.cpp.
| arith_uint256 & arith_uint256::SetCompact | ( | uint32_t | nCompact, |
| bool * | pfNegative = nullptr, | ||
| bool * | pfOverflow = nullptr ) |
The "compact" format is a representation of a whole number N using an unsigned 32bit number similar to a floating point format.
The most significant 8 bits are the unsigned exponent of base 256. This exponent can be thought of as "number of bytes of N". The lower 23 bits are the mantissa. Bit number 24 (0x800000) represents the sign of N. N = (-1^sign) * mantissa * 256^(exponent-3)
Satoshi's original implementation used BN_bn2mpi() and BN_mpi2bn(). MPI uses the most significant bit of the first byte as sign. Thus 0x1234560000 is compact (0x05123456) and 0xc0de000000 is compact (0x0600c0de)
Bitcoin only uses this "compact" format for encoding difficulty targets, which are unsigned 256bit quantities. Thus, all the complexities of the sign bit and using base 256 are probably an implementation accident.
Definition at line 175 of file arith_uint256.cpp.
|
friend |
Definition at line 218 of file arith_uint256.cpp.
|
friend |
Definition at line 225 of file arith_uint256.cpp.