std::rotr
ja.cppreference.net より
| ヘッダ <bit>
|
||
template< class T >
constexpr T rotr( 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::rotl(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, 9, -1, 2}) std::cout << bin(std::rotr(x, s)) << " <- rotr(x, " << s << ")\n"; }
出力:
00011101 <- x 00011101 <- rotr(x, 0) 10001110 <- rotr(x, 1) 10001110 <- rotr(x, 9) 00111010 <- rotr(x, -1) 01000111 <- rotr(x, 2)
関連項目
(C++20) |
ビット単位左ローテーションの結果を計算する (関数テンプレート) |
(C++29) |
整数のビットを反転する (関数テンプレート) |
| バイナリ左シフトと右シフトを実行する (のパブリックメンバ関数 std::bitset<N>)
|