我正在研究一个需要跟踪长度为 96 的位图的功能。我使用此图在下面编程 asic。是否有一个标准的整数类型来保存 96 位。对于 64 位,我们有 unsigned long long。96位有什么类似的吗?也欢迎任何替代建议。
PS:这是基于 linux 的 Cisco OS。语言是C。
GCC__int128
在支持它的目标上具有 128 位整数,但没有专门针对 96 位的整数。
我可能会选择一组 3 个 uint 的数组。这应该足够快,而且不会更复杂。
EG,设置一点:
wordNo = i / 32
bitNo = i - (32*wordNo)
mask = 2 ** bitNo
array[wordNo] |= mask
……或者差不多。
有一种方法可以创建一个大小为 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)。
您应该使用 clang 的新功能_ExtInt
。它在 clang 11 中,所以你可能没有它。在这里查看详细信息和用法。