【C/C艹】使用位运算实现常用的整数运算
众所周知,硬件底层仅支持位运算,所有高级运算均基于位运算组合实现。那么,如何利用基本位运算构造常用的整数运算(如加减乘除、乘方)呢?本文以SSE指令集为例,封装128位无符号整数的常用数学运算。之所以选择SSE,是因为它虽然提供了8位、16位、32位、64位的向量运算指令,却缺乏对128位大整数的直接算术支持;而其位运算恰好支持完整的128位操作。因此,我们可以用SSE的位运算模拟实现加减乘除及乘方,既填补了128位整数运算的空白,又便于阐述位运算构建高级运算的原理。目前实现仅限于无符号128位整数,暂不考虑有符号情况,以降低复杂度,方便初学者理解。直接上代码(需回帖可见):
**** Hidden Message *****
再上一个简单的测试代码:
int main()
{
char buf;
__m128i mi = _mm_cvtansi_si128("123456789098765432101234567890987654321");
int len = _mm_cvtsi128_asni(mi, buf);
puts(buf);
len = _mm_cvtsi128_asni(_mm_set1_epi32(-1), buf);
puts(buf);
return 0;
}
```
正确的输出结果为:
123456789098765432101234567890987654321
340282366920938463463374607431768211455
本地隐藏内容
页:
[1]