右シフトの引数は、整数値か 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 R &= A |
_mm_sll_si64 _mm_slli_si64 _mm_sll_pi32 _mm_slli_pi32 _mm_sll_pi16 _mm_slli_pi16 |
右シフト | >> | R = A >> B R >>= A |
_mm_srl_si64 _mm_srli_si64 _mm_srl_pi32 _mm_srli_pi32 _mm_srl_pi16 _mm_srli_pi16 _mm_sra_pi32 _mm_srai_pi32 _mm_sra_pi16 _mm_srai_pi16 |
符号付きのデータ型を右にシフトするときは算術シフトを使用します。符号なしクラスおよび中間クラスのときはすべて、論理シフトが使用されます。次の表は、最初の引数の型によって戻り値の型がどう決まるかを示したものです。
操作 | 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; |