Spec-Zone.ru › C++

std::bitset<N>::test

bool test( std::size_t pos ) const;
(constexpr начиная с C++23)

Возвращает значение бита в позиции pos (нумерация начинается с 0).

В отличие от operator[], выполняет проверку границ.

Параметры

pos - позиция возвращаемого бита (нумерация начинается с 0)

Возвращаемое значение

true, если запрошенный бит установлен, и false в противном случае.

Исключения

Выбрасывает std::out_of_range, если pos не соответствует допустимой позиции бита.

Пример

#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++.

Отчёт об ошибке Применяется к Опубликованное поведение Корректное поведение
LWG 2250 C++98 поведение было неопределённым, если pos
не соответствовало допустимой позиции бита
в этом случае всегда
выбрасывается исключение

См. также

operator[]
обращается к указанному биту
(открытая функция-член)
popcount
(C++20)
подсчитывает количество битов со значением 1 в беззнаковом целом числе
(шаблон функции)
has_single_bit
(C++20)
проверяет, является ли число целой степенью 2
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/bitset/test

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API