std:: bit_ceil
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++20)
|
||||
|
(C++23)
|
||||
| Integral powers of 2 | ||||
|
(C++20)
|
||||
|
bit_ceil
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| Rotating | ||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| Counting | ||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| Endian | ||||
|
(C++20)
|
|
Definiert im 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.
Wenn dieser Wert nicht in
T
darstellbar ist, ist das Verhalten undefiniert. Ein Aufruf dieser Funktion ist nur während der
konstanten Auswertung
zulässig, wenn das undefinierte Verhalten nicht auftritt.
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn
T
ein vorzeichenloser Ganzzahltyp ist (also
unsigned
char
,
unsigned
short
,
unsigned
int
,
unsigned
long
,
unsigned
long
long
oder ein erweiterter vorzeichenloser Ganzzahltyp).
Inhaltsverzeichnis |
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) |