Namespaces
Variants

std::bitset<N>:: test

From cppreference.net
Utilities library
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 << "第一个设置位位于索引 " << idx << '\n';
    else
        std::cout << "无设置位\n";
    try
    {
        std::bitset<0B10'1001'1010> bad;
        if (bad.test(bad.size()))
            std::cout << "预期之外的输出!\n";
    }
    catch (std::out_of_range const& ex)
    {
        std::cout << "异常: " << ex.what() << '\n';
    }
}

可能的输出:

第一个设置位位于索引 4
异常: bitset::test: __position (which is 666) >= _Nb (which is 666)

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 适用标准 发布时行为 正确行为
LWG 2250 C++98 pos 不对应
有效位位置时行为未定义
此情况下始终
抛出异常

参见

td> 计算无符号整数中 1 位的数量
(函数模板)
访问特定位
(公开成员函数)
(C++20)
检查数字是否为 2 的整数次幂
(函数模板)