インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
論理演算子では、次の表に列挙した記号と組込み関数を使用します。
ビット単位演算 |
演算子の記号 | 構文の使用方法 | 対応する組込み関数 |
||
---|---|---|---|---|---|
スタンダード |
代入付き |
スタンダード |
代入付き |
||
AND |
& |
&= |
R = A & B |
R &= A |
_mm_and_si64 |
OR |
| |
|= |
R = A | B |
R |= A |
_mm_and_si64 |
XOR |
^ |
^= |
R = A^B |
R ^= A |
_mm_and_si64 |
ANDNOT |
andnot |
N/A |
R = A andnot B |
N/A |
_mm_and_si64 |
論理演算子と例外
A と B を M64 に変換して、結果を Iu8vec8 に割り当てます。
I64vec1 A;
Is8vec8 B;
Iu8vec8 C;
C = A & B;
同じサイズと符号の演算子は、共通の親データ型のうち最も近いデータ型を返します。
I32vec2 R = Is32vec2 A ^ Iu32vec2 B;
A & B は M64 を返します。戻り値は Iu8vec8 にキャストします。
C = Iu8vec8(A&B)+ C;
A と B が同じクラスの場合、戻り値はそれと同じ型になります。A と B とが別のクラスの場合、戻り値は、両者に共通する親データ型のうち最も近いデータ型になります。
クラスを複数組み合わせた場合に論理演算子の戻り値がどうなるかを次の表に示します。これは、A と B が別のクラスの場合に適用されるものです。
Ivec 論理演算子の多重定義
戻り値 (R) |
AND |
OR |
XOR |
NAND |
A オペランド |
B オペランド |
---|---|---|---|---|---|---|
I64vec1 R |
& |
| |
^ |
andnot |
I[s|u]64vec2 A |
I[s|u]64vec2 B |
I64vec2 R |
& |
| |
^ |
andnot |
I[s|u]64vec2 A |
I[s|u]64vec2 B |
I32vec2 R |
& |
| |
^ |
andnot |
I[s|u]32vec2 A |
I[s|u]32vec2 B |
I32vec4 R |
& |
| |
^ |
andnot |
I[s|u]32vec4 A |
I[s|u]32vec4 B |
I16vec4 R |
& |
| |
^ |
andnot |
I[s|u]16vec4 A |
I[s|u]16vec4 B |
I16vec8 R |
& |
| |
^ |
andnot |
I[s|u]16vec8 A |
I[s|u]16vec8 B |
I8vec8 R |
& |
| |
^ |
andnot |
I[s|u]8vec8 A |
I[s|u]8vec8 B |
I8vec16 R |
& |
| |
^ |
andnot |
I[s|u]8vec16 A |
I[s|u]8vec16 B |
代入付き論理演算子の場合は次表のように、戻り値 R は常に、事前に宣言した値 R と同じデータ型になります。
代入付き Ivec 論理演算子の多重定義
戻り値の型 |
左辺 (R) |
AND |
OR |
XOR |
右辺 (任意の Ivec 型) |
---|---|---|---|---|---|
I128vec1 |
I128vec1 R |
&= |
|= |
^= |
I[s|u][N]vec[N] A; |
I64vec1 |
I64vec1 R |
&= |
|= |
^= |
I[s|u][N]vec[N] A; |
I64vec2 |
I64vec2 R |
&= |
|= |
^= |
I[s|u][N]vec[N] A; |
I[x]32vec4 |
I[x]32vec4 R |
&= |
|= |
^= |
I[s|u][N]vec[N] A; |
I[x]32vec2 |
I[x]32vec2 R |
&= |
|= |
^= |
I[s|u][N]vec[N] A; |
I[x]16vec8 |
I[x]16vec8 R |
&= |
|= |
^= |
I[s|u][N]vec[N] A; |
I[x]16vec4 |
I[x]16vec4 R |
&= |
|= |
^= |
I[s|u][N]vec[N] A; |
I[x]8vec16 |
I[x]8vec16 R |
&= |
|= |
^= |
I[s|u][N]vec[N] A; |
I[x]8vec8 |
I[x]8vec8 R |
&= |
|= |
^= |
I[s|u][N]vec[N] A; |