最終更新日時:
が更新

履歴 編集

function template
<bit>

std::shr(C++29)

namespace std {
  template <class T, class S>
  constexpr T shr(T x, S s) noexcept; // C++29
}

概要

xを右方向にsビットシフトした値(x2s乗で割った値)を求める。

組み込みのoperator>>と異なり、シフト量sTのビット幅以上であっても、また負であっても未定義動作とならない。sが負の場合は、左方向へ-sビットシフトした結果(shl(x, -s))となる。

xが符号付き整数型で負の値の場合は、負の無限大方向に丸められる(算術右シフトに相当する)。

テンプレートパラメータ制約

  • TSがそれぞれ符号付きまたは符号なし整数型であること

戻り値

十分な値域をもつ仮想的な整数型でx × 2-sを計算して負の無限大方向に丸め、その結果をstatic_castTに変換した値を返す。

例外

投げない

備考

  • shr(x, s)shl(x, -s)に等しい。

#include <bit>
#include <cstdint>
#include <print>

int main()
{
  std::uint8_t x = 0b0011'0000;

  std::uint8_t r = std::shr(x, 2);

  std::println("{:08b}", r);
}

出力

00001100

バージョン

言語

  • C++29

処理系

関連項目

参照