无符号96位整数的任何预定义类型?

时间:2012-07-13 17:21:00

标签: c linux

我正在研究一个需要跟踪长度为96的位图的功能。我使用此地图编程asic如下。 是否有标准整数类型可容纳96位。对于64位,我们有无符号长long。有什么相似的96位? 任何其他建议也欢迎。

PS:这是基于Linux的思科操作系统。语言是C.

4 个答案:

答案 0 :(得分:3)

我可能会使用3个uint的数组。这应该足够快,而不是更复杂。

EG,设置一下:

wordNo = i / 32
bitNo = i - (32*wordNo)
mask = 2 ** bitNo

array[wordNo] |= mask

......或者在那附近。

答案 1 :(得分:2)

GCC在支持它的目标上有128位整数__int128,但96位没有特别的。

答案 2 :(得分:2)

有一种方法可以创建一个变量,其大小精确为96位:联合或结构中的位域。

typedef union { // you can use union or struct here
    __uint128_t i : 96;
} __attribute__((packed)) uint96_t;

uint96_t var;  // new uint96_t variable
var.i = 123;   // set the value to 123 (for example)

gcc这对我有用。如果您使用uint96_t测试sizeof的大小,则应获得12个字节(12 * 8 = 96)。

答案 3 :(得分:0)

您应该使用clang的新功能_ExtInt。它在clang 11中,因此您可能没有。在docs example中查找详细信息和用法。