インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
右シフトの引数は、整数値か Ivec 値であれば何でもかまわず、暗黙的に M64 データ型に変換されます。<< という演算子の第 1 オペランドまたは左側のオペランドには、I[s|u]8vec[8|16] 以外のどの型でも使用できます。
シフト演算子の構文の使用例
サイズと符号を自動変換します。
Is16vec4 A,C;
Iu32vec2 B;
C = A;
A & B は I16vec4 を返します。確実に論理シフトを行えるように、戻り値を Iu16vec4 にキャストします。
Is16vec4 A, C;
Iu16vec4 B, R;
R = (Iu16vec4)(A & B) C;
A & B は I16vec4 を返します。確実に算術シフトを行えるように、戻り値を Is16vec4 にキャストします。
R = (Is16vec4)(A & B) C;
シフト演算子と対応する組込み関数
演算 |
記号 |
構文の使用方法 |
組込み関数 |
---|---|---|---|
左シフト |
<< |
R = A << B |
_mm_sll_si64 |
右シフト |
>> |
R = A >> B |
_mm_srl_si64 |
符号付きのデータ型を右にシフトするときは算術シフトを使用します。符号なしクラスおよび中間クラスのときはすべて、論理シフトが使用されます。次の表は、最初の引数の型によって戻り値の型がどう決まるかを示したものです。
シフト演算子の多重定義
オプション |
R |
右シフト | 左シフト | A |
B |
||
---|---|---|---|---|---|---|---|
論理 |
I64vec1 |
>> |
>>= |
<< |
<<= |
I64vec1 A; |
I64vec1 B; |
論理 |
I32vec2 |
>> |
>>= |
<< |
<<= |
I32vec2 A |
I32vec2 B; |
算術 |
Is32vec2 |
>> |
>>= |
<< |
<<= |
Is32vec2 A |
I[s|u][N]vec[N] B; |
論理 |
Iu32vec2 |
>> |
>>= |
<< |
<<= |
Iu32vec2 A |
I[s|u][N]vec[N] B; |
論理 |
I16vec4 |
>> |
>>= |
<< |
<<= |
I16vec4 A |
I16vec4 B |
算術 |
Is16vec4 |
>> |
>>= |
<< |
<<= |
Is16vec4 A |
I[s|u][N]vec[N] B; |
論理 |
Iu16vec4 |
>> |
>>= |
<< |
<<= |
Iu16vec4 A |
I[s|u][N]vec[N] B; |