friend constexpr basic_vec
operator<<(const basic_vec& lhs, const basic_vec& rhs) noexcept; // (1)
friend constexpr basic_vec
operator<<(const basic_vec& v, simd-size-type n) noexcept; // (2)
概要
basic_vecオブジェクトの各要素を左ビットシフトする。要素型が整数型である場合に使用できる。
- (1) : 対応する要素同士で、
lhsの各要素をrhsの対応する要素分だけ左シフトする。 - (2) :
vの各要素を、スカラ値n分だけ左シフトする。
いずれもHidden friendsとして定義される。
テンプレートパラメータ制約
戻り値
- (1) :
lhsとrhsに左シフトを要素ごとに適用した結果で初期化されたbasic_vecオブジェクトを返す。 - (2) :
i番目の要素をv[i] << nとしたbasic_vecオブジェクトを返す。
例
#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); }; // {1, 2, 3, 4}
simd::vec<std::uint8_t, 4> b = [](int i) { return static_cast<std::uint8_t>(i + 1); }; // {1, 2, 3, 4}
// (1) 要素ごとのシフト量
simd::vec<std::uint8_t, 4> c = a << b;
// (2) スカラのシフト量
simd::vec<std::uint8_t, 4> d = a << 2;
for (int i = 0; i < c.size(); ++i) {
std::println("{:08b} << {:08b} -> {:08b}", a[i], b[i], c[i]);
}
for (int i = 0; i < d.size(); ++i) {
std::println("{:08b} << 2 -> {:08b}", a[i], d[i]);
}
}
出力
00000001 << 00000001 -> 00000010
00000010 << 00000010 -> 00001000
00000011 << 00000011 -> 00011000
00000100 << 00000100 -> 01000000
00000001 << 2 -> 00000100
00000010 << 2 -> 00001000
00000011 << 2 -> 00001100
00000100 << 2 -> 00010000
バージョン
言語
- C++26
処理系
- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌