Skip to content

Latest commit

 

History

History
92 lines (70 loc) · 2.51 KB

File metadata and controls

92 lines (70 loc) · 2.51 KB

operator>>=

  • simd[meta header]
  • std::simd[meta namespace]
  • basic_vec[meta class]
  • function[meta id-type]
  • cpp26[meta cpp]
friend constexpr basic_vec&
  operator>>=(basic_vec& lhs, const basic_vec& rhs) noexcept; // (1)
friend constexpr basic_vec&
  operator>>=(basic_vec& lhs, simd-size-type n) noexcept;     // (2)
  • simd-size-type[link /reference/simd/simd-size-type.md]
  • basic_vec[color ff0000]

概要

basic_vecオブジェクトの各要素を右ビットシフトし、その結果を左辺に代入する。

  • (1) : 各要素を、rhsの対応する要素が示すビット数だけ右シフトする
  • (2) : 全要素をnビットだけ右シフトする

simd-size-typeは、要素の添字を表現できる符号付き整数型の説明専用の別名である。

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

  • (1) : value_type型の値a, bに対して、式a >> bが有効であること
  • (2) : value_type型の値asimd-size-type型の値bに対して、式a >> bが有効であること

効果

  • (1) : lhsrhsに対して、右ビットシフトを要素ごとの演算として適用する

  • (2) : 以下と等価である

    return operator>>(lhs, basic_vec(n));

戻り値

lhs

例外

投げない

#include <simd>
#include <print>
#include <cstdint>

namespace simd = std::simd;

int main()
{
  simd::vec<std::uint8_t, 4> a = [](int i) { return static_cast<std::uint8_t>((i + 1) * 8); };  // {8, 16, 24, 32}

  simd::vec<std::uint8_t, 4> a0 = a;  // 演算前の値
  a >>= 1; // 全要素を1ビット右シフト(1/2倍)

  for (int i = 0; i < a.size(); ++i) {
    std::println("{:08b} >> 1 -> {:08b}", a0[i], a[i]);
  }
}
  • a >>= 1[color ff0000]
  • a.size()[link size.md]

出力

00001000 >> 1 -> 00000100
00010000 >> 1 -> 00001000
00011000 >> 1 -> 00001100
00100000 >> 1 -> 00010000

バージョン

言語

  • C++26

処理系

関連項目

参照