table of contents
std::experimental::simd::operator!,~,+,-(3) | C++ Standard Libary | std::experimental::simd::operator!,~,+,-(3) |
NAME¶
std::experimental::simd::operator!,~,+,- - std::experimental::simd::operator!,~,+,-
Synopsis¶
mask_type operator!() const noexcept; (1) (parallelism TS
v2)
simd operator~() const noexcept; (2) (parallelism TS v2)
simd operator+() const noexcept; (3) (parallelism TS v2)
simd operator-() const noexcept; (4) (parallelism TS v2)
Applies the given unary operator on each element of the simd.
1) Returns a simd_mask<T, Abi> where the i^th element equals
!operator[](i) for all
i in the range of [0, size()).
2) Returns a simd where each bit is the inverse of the corresponding bit in
*this.
This overload participates in overload resolution only if T is an integral
type.
3) Returns a copy of itself.
4) Returns a simd where the i^th element is initialized to -operator[](i) for
all i
in the range of [0, size()).
Example¶
// Run this code
#include <cstddef>
#include <experimental/simd>
#include <iostream>
#include <string_view>
namespace stdx = std::experimental;
void println(std::string_view op, const stdx::native_simd_mask<int> x)
{
std::cout << op << ": ";
for (std::size_t i = 0; i < x.size(); ++i)
std::cout << std::boolalpha << x[i] << ' ';
std::cout << '\n';
}
void println(std::string_view op, const stdx::native_simd<int> x)
{
std::cout << op << ": ";
for (std::size_t i = 0; i < x.size(); ++i)
std::cout << x[i] << ' ';
std::cout << '\n';
}
int main()
{
const stdx::native_simd<int> a([](int i) { return i; });
println(" a", a);
println(" !a", !a);
println(" ~a", ~a);
println("~~a", ~~a);
println(" +a", +a);
println(" -a", -a);
println("+-a", +-a);
}
Possible output:¶
a: 0 1 2 3
!a: true false false false
~a: -1 -2 -3 -4
~~a: 0 1 2 3
+a: 0 1 2 3
-a: 0 -1 -2 -3
+-a: 0 -1 -2 -3
2024.06.10 | http://cppreference.com |