【问题标题】:Any predefined type for unsigned 96 bit integer?无符号 96 位整数的任何预定义类型?
【发布时间】:2012-07-13 17:21:00
【问题描述】:

我正在开发一个需要跟踪长度为 96 的位图的功能。我使用此图来编写下面的 asic。 是否有一个标准的整数类型来保存 96 位。对于 64 位,我们有 unsigned long long。 96位有什么类似的吗? 也欢迎任何替代建议。

PS:这是基于 linux 的 Cisco OS。语言是 C。

【问题讨论】:

  • 为什么不简单地使用 3 个 32 位整数?
  • 我认为答案是否定的(因为没有现有的定义),但我该如何寻找呢?

标签: c linux


【解决方案1】:

我可能会选择 3 个 uint 的数组。这应该足够快,而且不会更复杂。

EG,设置一点:

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

array[wordNo] |= mask

...或附近。

【讨论】:

    【解决方案2】:

    GCC 在支持它的目标上为 128 位整数提供了 __int128,但没有专门针对 96 位。

    【讨论】:

    • +1,但更准确地说,gcc 在具有本机 64 位整数类型的架构上具有此功能。
    【解决方案3】:

    有一种方法可以创建 一个 大小为 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。如果你用sizeof 测试uint96_t 的大小,你应该得到12 个字节(12 * 8 = 96)。

    【讨论】:

      【解决方案4】:

      你应该使用 clang 的新功能_ExtInt。它在 clang 11 中,所以你可能没有它。查看here了解详细信息和用法。

      【讨论】:

        猜你喜欢
        • 2012-07-12
        • 2020-04-15
        • 2018-07-01
        • 2021-03-25
        • 2014-06-22
        • 2015-05-27
        • 1970-01-01
        • 2016-01-19
        • 2013-11-06
        相关资源
        最近更新 更多