std::rotl
From cppreference.com
| ヘッダ <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) |
ビット単位の右ローテートの結果を計算する (関数テンプレート) |
| ビット単位の左シフトと右シフトを実行する ( std::bitset<N> のパブリックメンバ関数) |