uint256とは?

最大値を並べてみました。
uint32_t: 2^32 (0xFFFFFFFF)
uint64_t: 2^64 (0xFFFFFFFFFFFFFFFF)
uint256: 2^256 (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)

非常に大きな数を扱うことができる「独自定義のクラス」となります。("_t"が接尾にないのはそのためです)
operatorの作用によりuint32_tと同じ感覚で扱うことができますので、迷うことはありません。

※ 2021年8月修正:bitcoinのuint256は、加法と減法のみのサポートでした。 このため、こちらのロジックを活用いたしまして乗法・除法・剰余・べき乗・正負(int256)・群をサポートいたしました。

また、uint8_tが32個、固定長で連結されている構造となるため、
uint256自体を固定長のvectorとして扱うことができます。
主にハッシュ計算の結果を収めるため、使用頻度が非常に高いです。その分、すぐに慣れます(^^;
※ 64ビットより幅が広い数を代入する場合に限り、0xからはじまる「文字列」を利用いたします。

サンプルコード

uint256 hash = ~uint256(0);
hash -= uint256(12345678);
hash -= uint256("0x00002046b1c7938971a6089c7105fc15907b8f27ac8dfea9896c27c593a9a966");
::fprintf(stdout, "hash=0x%s\n", hash.ToString().c_str());

uint256 test1("0x00002046b1c7938971a6089c7105fc15907b8f27ac8dfea9896c27c593a9a966");
uint256 test2("0x000000000000000000000000000000000000000000000000000000000000a966");
test1 *= test2;
::fprintf(stdout, "test1=0x%s\n", test1.ToString().c_str());
test1 %= test2;
::fprintf(stdout, "test1=0x%s\n", test1.ToString().c_str());

test1.SetHex("0x00002046b1c7938971a6089c7105fc15907b8f27ac8dfea9896c27c593a9a966");
test1 /= test2;
::fprintf(stdout, "test1=0x%s\n", test1.ToString().c_str());

test2 ^= 8;
::fprintf(stdout, "test2=0x%s\n", test2.ToString().c_str());
	
□ 本ページをご覧いただきました方は、以下のページもよくご覧いただいております。
■ 集計中.....