最終更新日時:
が更新

履歴 編集

function template
<bit>

std::bit_expand(C++29)

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

概要

xの下位ビットを、マスクmでビットが立っている位置へ順に配置する(parallel bits deposit)。

x86のPDEP命令に相当する操作であり、bit_compressの逆操作である。

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

  • Tが符号なし整数型であること

戻り値

Tのビット数をNとする。mの第nビットが1である位置を下位から順に走査し、xの下位ビットから順に取り出した値をその位置へ配置した値を返す。すなわち、mのなかでk番目に立っているビット位置には、xの第kビットが配置される。

例外

投げない

備考

  • bit_compressは逆操作である。mのビットがすべて1のとき、bit_expand(bit_compress(x, m), m)xに等しい。

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

int main()
{
  std::uint8_t x = 0b0000'1011;
  std::uint8_t m = 0b1111'0000; // 下位4ビットを上位4ビットの位置へ展開

  std::uint8_t r = std::bit_expand(x, m);

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

出力

10110000

バージョン

言語

  • C++29

処理系

関連項目

参照