【发布时间】:2019-09-12 02:43:04
【问题描述】:
操作系统:Linux (Debian 10)
CC:GCC 8.3
CPU:i7-5775C
在 GCC 中有一个 unsigned __int128/__int128,但是有什么方法可以在 GCC 中有一个 uint256_t/int256_t?
我读过似乎来自英特尔的__m256i。有没有我可以包含的标题来获取它?
它和假设的unsigned __int256 一样有用吗?我的意思是,如果您可以对其进行分配、比较、按位运算等。
它的签名等价物是什么(如果有的话)?
编辑 1:
我做到了:
#include <immintrin.h>
typedef __m256i uint256_t;
并编译。如果我可以用它做一些操作,我会在这里更新它。
编辑 2:
发现的问题:
uint256_t m;
int l = 5;
m = ~((uint256_t)1 << l);
输出:
error: can’t convert a value of type ‘int’ to vector type ‘__vector(4) long long int’ which has different size
m = ~((uint256_t)1 << l);
【问题讨论】:
-
当然不能只使用
__m256i作为整数类型,因为它不是整数类型而是向量,如错误输出中所述。见Is it possible to use SSE and SSE2 to make a 128-bit wide integer?、Integer SIMD Instruction AVX in C、practical BigNum AVX/SSE possible? -
如果你只想要一个 256 位的 int 类型,那么会有很多重复的128/256-bit fixed size integer types、Representing 128-bit numbers in C++、C++: How do I store a 256 bit number, and how do I convert it to hex?...
-
@phuclv 所有这些问题都是 C++。不过,我会看看它们,看看在 C 中是否有用。
标签: c gcc x86-64 bigint extended-precision