std::rotl
ja.cppreference.net より
| ヘッダ <bit>
|
||
template< class T >
constexpr T rotl( T x, int s ) noexcept;
|
で定義 (C++20以上) | |
x の値を s ビットだけビット単位で左回転した結果を計算します。この操作は左 循環シフト としても知られています。
形式的には、N を std::numeric_limits<T>::digits、r を s % N とします。
rが0の場合は、xを返します。rが正の場合は、(x << r) | (x >> (N - r))を返します。rが負の場合は、std::rotr(x, -r)を返します。
このオーバーロードは、T が符号なし整数型(すなわち、unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long, または拡張符号なし整数型)である場合にのみオーバーロード解決に参加します。
パラメータ
| x | - | 符号なし整数型の値 |
| s | - | シフトするビット数 |
戻り値
x を s ビット位置だけ左回転した結果。
注記
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_bitops
|
201907L
|
(C++20) | ビット操作 |
例
このコードを実行
#include <bit> #include <bitset> #include <cstdint> #include <iostream> int main() { using bin = std::bitset<8>; const std::uint8_t x{0b00011101}; std::cout << bin(x) << " <- x\n"; for (const int s : {0, 1, 4, 9, -1}) std::cout << bin(std::rotl(x, s)) << " <- rotl(x, " << s << ")\n"; }
出力:
00011101 <- x 00011101 <- rotl(x, 0) 00111010 <- rotl(x, 1) 11010001 <- rotl(x, 4) 00111010 <- rotl(x, 9) 10001110 <- rotl(x, -1)
関連項目
(C++20) |
ビット単位の右ローテーションの結果を計算する (関数テンプレート) |
(C++29) |
整数のビットを反転する (関数テンプレート) |
| バイナリ左シフトおよび右シフトを実行する ( std::bitset<N>のパブリックメンバ関数)
|