- bit[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp29[meta cpp]
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);
}- std::shl[color ff0000]
00001100
- C++29
- Clang: 22 [mark noimpl]
- GCC: 16.1 [mark noimpl]
- Visual C++: 2026 Update 2 [mark noimpl]
- P3793R1 Better shifting
- C++29で追加された