_mm_cvtps_epi32 转换细节

本文介绍了SSE2指令集中的两条重要指令CVTPS2DQ和CVTPS2DQ使用truncate的区别。通过示例说明了两种指令在将浮点数转换为整数时的不同截断规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

_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;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值