_mm_cvtps_epi32 转换细节

_mm_cvtps_epi32 是SSE2的一条指令CVTPS2DQ。在MSDN上的解释是

Converts the four single-precision, floating-point values of a to signed 32-bit integer values.

把四个float变量强转为四个int变量。其中需要注意的是他的截断规则:四舍五入,在进位后末位是偶数的进,否则不进位。

紧接着是另一个指令_mm_cvttps_epi32, Converts the four single-precision, floating-point values of a to signed 32-bit integer values using truncate。

这里就多了using truncate,意思是直接截断。与C/C++中的 r = (int)a 一样。使用它们时候要注意哦。

 

 __m128 test1 = _mm_set_ps(3.4f, 3.5f, 3.6f, 4.5f);

 __m128i test2 = _mm_cvtps_epi32(test1);

 __m128i test3 = _mm_cvttps_epi32(test1);

 

test2 结果是: 3,4,4,4;

test3 结果是: 3,3,3,4;

你可能感兴趣的:(Integer,float)