Bitcoin Core 31.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
arith_uint256 Class Reference

256-bit unsigned big integer. More...

#include <arith_uint256.h>

Inheritance diagram for arith_uint256:
[legend]
Collaboration diagram for arith_uint256:
[legend]

Public Member Functions

constexpr arith_uint256 ()=default
constexpr arith_uint256 (const base_uint &b)
constexpr arith_uint256 (uint64_t b)
arith_uint256SetCompact (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.
uint32_t GetCompact (bool fNegative=false) const
Public Member Functions inherited from base_uint< 256 >
constexpr base_uint ()
base_uintoperator= (const base_uint &b)=default
base_uint operator~ () const
base_uint operator- () const
double getdouble () const
base_uintoperator^= (const base_uint &b)
base_uintoperator&= (const base_uint &b)
base_uintoperator|= (const base_uint &b)
base_uintoperator<<= (unsigned int shift)
base_uintoperator>>= (unsigned int shift)
base_uintoperator+= (const base_uint &b)
base_uintoperator-= (const base_uint &b)
base_uintoperator*= (uint32_t b32)
base_uintoperator/= (const base_uint &b)
base_uintoperator++ ()
base_uintoperator-- ()
int CompareTo (const base_uint &b) const
 Numeric ordering (unlike base_blob::Compare).
bool EqualTo (uint64_t b) const
std::string GetHex () const
 Hex encoding of the number (with the most significant digits first).
std::string ToString () const
unsigned int size () const
unsigned int bits () const
 Returns the position of the highest bit set plus one, or zero if the value is zero.
uint64_t GetLow64 () const

Friends

uint256 ArithToUint256 (const arith_uint256 &a)
arith_uint256 UintToArith256 (const uint256 &a)

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

Detailed Description

256-bit unsigned big integer.

Definition at line 230 of file arith_uint256.h.

Constructor & Destructor Documentation

◆ arith_uint256() [1/3]

arith_uint256::arith_uint256 ( )
constexprdefault
Here is the caller graph for this function:

◆ arith_uint256() [2/3]

arith_uint256::arith_uint256 ( const base_uint & b)
inlineconstexpr

Definition at line 234 of file arith_uint256.h.

Here is the call graph for this function:

◆ arith_uint256() [3/3]

arith_uint256::arith_uint256 ( uint64_t b)
inlineconstexpr

Definition at line 235 of file arith_uint256.h.

Here is the call graph for this function:

Member Function Documentation

◆ GetCompact()

uint32_t arith_uint256::GetCompact ( bool fNegative = false) const

Definition at line 195 of file arith_uint256.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetCompact()

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.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ArithToUint256

uint256 ArithToUint256 ( const arith_uint256 & a)
friend

Definition at line 218 of file arith_uint256.cpp.

◆ UintToArith256

arith_uint256 UintToArith256 ( const uint256 & a)
friend

Definition at line 225 of file arith_uint256.cpp.


The documentation for this class was generated from the following files: