std::bitset<128>
C ++でaをインクリメントするにはどうすればよいですか?
ビットセットは 128 ビット長であるため、単純に行うことはできません。
std::bitset<128> set = std::bitset<128>();
set = std::bitset<128>(set.to_ulong() + 1ULL);
std::bitset<128>
C ++でaをインクリメントするにはどうすればよいですか?
ビットセットは 128 ビット長であるため、単純に行うことはできません。
std::bitset<128> set = std::bitset<128>();
set = std::bitset<128>(set.to_ulong() + 1ULL);
私は Oli に同意するつもりです。「大整数」を実行したい場合は、大整数ライブラリを使用する必要があります。
ただし、本当にを使用してこれを行いたい場合std::bitset
は、自分で計算を行う必要があります。
template <size_t N>
std::bitset<N> increment ( std::bitset<N> in ) {
// add 1 to each value, and if it was 1 already, carry the 1 to the next.
for ( size_t i = 0; i < N; ++i ) {
if ( in[i] == 0 ) { // There will be no carry
in[i] = 1;
break;
}
in[i] = 0; // This entry was 1; set to zero and carry the 1
}
return in;
}
int main () {
std::bitset<32> foo;
std::cout << foo.to_ulong () << ' ';
foo = increment ( foo );
std::cout << foo.to_ulong () << ' ';
foo = increment ( foo );
std::cout << foo.to_ulong () << ' ';
foo = increment ( foo );
std::cout << foo.to_ulong () << std::endl;
return 0;
}
これは私のために印刷0 1 2 3
されます。
上記のコードの問題は、特に次の行にあります。
set = std::bitset<128>(set.to_ulong() + 1ULL);
Unsigned long [ulong] は、OS + チップセットに応じて、C++ では少なくとも 32 ビット型であるため、128 ビット変数をこの型にキャストしようとすると、小さな問題が発生します (より大きなタイプ、つまり)。
すべてが失われるわけではありません。@Oli Charlesworth が前述したように、bigint ライブラリを使用できます。それらは豊富にあります。私が以前使っていたまともなものはここにあります。
上記でやろうとしていることについては、ビットセットで動作する to_bigint() のような大きな整数ライブラリのコンテキストで to_ulong() 関数をサブしてみてください。
お役に立てれば。