std::bit_width
| Определён в заголовочном файле <bit>
|
||
template< class T >
constexpr int bit_width( T x ) noexcept;
|
(начиная с C++20) | |
Если x не равно нулю, вычисляет количество битов, необходимое для хранения значения x, то есть 1 + floor(log2(x)). Если x равно нулю, возвращает ноль.
Эта перегрузка участвует в разрешении перегрузки только если T является беззнаковым целым типом (то есть unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long или расширенным беззнаковым целым типом).
Параметры
| x | - | беззнаковое целое значение |
Возвращаемое значение
Ноль, если x равен нулю; иначе — единица плюс двоичный логарифм от x , с отбрасыванием дробной части.
Примечания
Эта функция эквивалентна return std:: numeric_limits < T > :: digits - std:: countl_zero ( x ) ; .
| Макрос тестирования возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_int_pow2
|
202002L
|
(C++20) | Операции со степенями двойки для целых чисел |
Пример
#include <bit> #include <bitset> #include <iostream> int main() { for (unsigned x{}; x != 010; ++x) std::cout << "bit_width( " << std::bitset<4>{x} << " ) = " << std::bit_width(x) << '\n'; }
Вывод:
bit_width( 0000 ) = 0 bit_width( 0001 ) = 1 bit_width( 0010 ) = 2 bit_width( 0011 ) = 2 bit_width( 0100 ) = 3 bit_width( 0101 ) = 3 bit_width( 0110 ) = 3 bit_width( 0111 ) = 3
Отчёты о дефектах
Следующие отчеты о дефектах, изменяющих поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Исправленное поведение |
|---|---|---|---|
| LWG 3656 | C++20 |
возвращаемый тип
bit_width
совпадает с типом аргумента функции
|
изменен на int |
Смотрите также
|
(C++20)
|
подсчитывает количество последовательных
0
битов, начиная со старшего бита
(шаблон функции) |