_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;
SSE2指令解析
本文介绍了SSE2指令集中的两条重要指令CVTPS2DQ和CVTPS2DQ使用truncate的区别。通过示例说明了两种指令在将浮点数转换为整数时的不同截断规则。
2891

被折叠的 条评论
为什么被折叠?



