std::bitset<N>::test
From cppreference.com
bool test( std::size_t pos ) const; |
(C++23 以降 constexpr) | |
posで指定された位置(0から数える)のビットの値を取得します。
operator[]とは異なり、境界チェックを行います。
目次 |
[編集] パラメータ
| pos | - | 取得するビットの位置(0から数える) |
[編集] 戻り値
指定されたビットがセットされている場合はtrue、そうでない場合はfalse。
[編集] 例外
posが有効なビット位置に対応しない場合、std::out_of_rangeをスローします。
[編集] 例
このコードを実行
#include <bit> #include <bitset> #include <cassert> #include <iostream> #include <stdexcept> int main() { std::bitset<10> b1("1111010000"); std::size_t idx = 0; while (idx < b1.size() && !b1.test(idx)) ++idx; assert(static_cast<int>(idx) == std::countr_zero(b1.to_ulong())); if (idx < b1.size()) std::cout << "The first set bit is at index " << idx << '\n'; else std::cout << "no set bits\n"; try { std::bitset<0B10'1001'1010> bad; if (bad.test(bad.size())) std::cout << "Expect unexpected!\n"; } catch (std::out_of_range const& ex) { std::cout << "Exception: " << ex.what() << '\n'; } }
実行結果の例
The first set bit is at index 4 Exception: bitset::test: __position (which is 666) >= _Nb (which is 666)
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 2250 | C++98 | posが有効なビット位置に対応しない場合、動作は未定義でした。 この場合、常に例外がスローされます。 |
この場合、常に例外がスローされます。 例外がスローされます。 |
[編集] 関連項目
| 特定のビットにアクセスする (public member function) | |
| (C++20) |
符号なし整数内の1ビットの数を数える (関数テンプレート) |
| (C++20) |
数値が2の整数乗であるかチェックする (関数テンプレート) |