namespace std {
template <class T, class S>
constexpr T shl(T x, S s) noexcept; // C++29
}
概要
値xを左方向にsビットシフトした値(xを2のs乗倍した値)を求める。
組み込みのoperator<<と異なり、シフト量sがTのビット幅以上であっても、また負であっても未定義動作とならない。sが負の場合は、右方向へ-sビットシフトした結果(shr(x, -s))となる。
テンプレートパラメータ制約
TとSがそれぞれ符号付きまたは符号なし整数型であること
戻り値
十分な値域をもつ仮想的な整数型でx × 2sを計算して負の無限大方向に丸め、その結果をstatic_castでTに変換した値を返す。
例外
投げない
備考
shl(x, s)はshr(x, -s)に等しい。
例
#include <bit>
#include <cstdint>
#include <print>
int main()
{
std::uint8_t x = 0b0000'0011;
std::uint8_t r = std::shl(x, 2);
std::println("{:08b}", r);
}
出力
00001100
バージョン
言語
- C++29
処理系
- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌
関連項目
参照
- P3793R1 Better shifting
- C++29で追加された