インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

論理演算子

論理演算子では、次の表に列挙した記号と組込み関数を使用します。

ビット単位演算

演算子の記号 構文の使用方法

対応する組込み関数

スタンダード

代入付き

スタンダード

代入付き

AND

&

&=

R = A & B

R &= A

_mm_and_si64
_mm_and_si128

OR

|

|=

R = A | B

R |= A

_mm_and_si64
_mm_and_si128

XOR

^

^=

R = A^B

R ^= A

_mm_and_si64
_mm_and_si128

ANDNOT

andnot

N/A

R = A andnot B

N/A

_mm_and_si64
_mm_and_si128

論理演算子と例外

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;

AB が同じクラスの場合、戻り値はそれと同じ型になります。AB とが別のクラスの場合、戻り値は、両者に共通する親データ型のうち最も近いデータ型になります。

クラスを複数組み合わせた場合に論理演算子の戻り値がどうなるかを次の表に示します。これは、AB が別のクラスの場合に適用されるものです。

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;