std::bit_ceil
| Definiert in Header <bit>
|
||
template< class T >
constexpr T bit_ceil( T x );
|
(seit C++20) | |
Berechnet die kleinste ganzzahlige Zweierpotenz, die nicht kleiner als x ist.
Falls dieser Wert in T nicht darstellbar ist, ist das Verhalten undefiniert. Ein Aufruf dieser Funktion ist in konstanter Auswertung nur gestattet, wenn das undefinierte Verhalten nicht auftritt.
Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn T ein vorzeichenloser Ganzzahltyp ist (d.h. unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long oder ein erweiterter vorzeichenloser Ganzzahltyp).
Parameter
| x | - | Wert des vorzeichenlosen Ganzzahltyps |
Rückgabewert
Die kleinste ganzzahlige Zweierpotenz, die nicht kleiner ist als x .
Ausnahmen
Wirft nichts.
Hinweise
Vor
P1956R1
war der vorgeschlagene Name für diese Funktionsvorlage
ceil2
.
| Feature-Test Makro | Wert | Std | Funktion |
|---|---|---|---|
__cpp_lib_int_pow2
|
202002L
|
(C++20) | Ganzzahlige Zweierpotenz- 2 Operationen |
Mögliche Implementierung
Siehe mögliche Implementierungen in libstdc++ (gcc) und libc++ (clang) .
template<typename T, typename ... U> concept neither = (!std::same_as<T, U> && ...); template<std::unsigned_integral T> requires neither<T, bool, char, char8_t, char16_t, char32_t, wchar_t> constexpr T bit_ceil(T x) noexcept { if (x <= 1u) return T(1); if constexpr (std::same_as<T, decltype(+x)>) return T(1) << std::bit_width(T(x - 1)); else { // für Typen, die Ganzzahl-Höherstufung unterliegen constexpr int offset_for_ub = std::numeric_limits<unsigned>::digits - std::numeric_limits<T>::digits; return T(1u << (std::bit_width(T(x - 1)) + offset_for_ub) >> offset_for_ub); } } |
Beispiel
#include <bit> #include <bitset> #include <iostream> int main() { using bin = std::bitset<8>; for (auto x{0U}; 0XA != x; ++x) std::cout << "bit_ceil( " << bin(x) << " ) = " << bin(std::bit_ceil(x)) << '\n'; }
Ausgabe:
bit_ceil( 00000000 ) = 00000001 bit_ceil( 00000001 ) = 00000001 bit_ceil( 00000010 ) = 00000010 bit_ceil( 00000011 ) = 00000100 bit_ceil( 00000100 ) = 00000100 bit_ceil( 00000101 ) = 00001000 bit_ceil( 00000110 ) = 00001000 bit_ceil( 00000111 ) = 00001000 bit_ceil( 00001000 ) = 00001000 bit_ceil( 00001001 ) = 00010000
Siehe auch
|
(C++20)
|
findet die größte ganzzahlige Potenz von
2
die nicht größer als der gegebene Wert ist
(Funktions-Template) |