【问题标题】:Maximum size of a bit field in C or C++? [duplicate]C 或 C++ 中位域的最大大小? [复制]
【发布时间】:2013-01-27 23:48:13
【问题描述】:

可能重复:
struct bitfield max size (C99, C++)

我可以在 C 或 C++ 的位字段中指定的位数是否有限制?例如,我可以这样做吗:

struct HugeInt {
    int myInt: 1000;
};

我问的是 C 和 C++,因为我知道语言规范有时会有所不同,并且想看看上面的示例是否可以保证在 C 或 C++ 中工作/不工作。

【问题讨论】:

  • 这不是和这个一样吗? stackoverflow.com/questions/2647320/…
  • @KingsIndian- 是的,你是对的。我第一次错过了那个!
  • 好的。投票关闭。我最近读了另一本:)
  • @KingsIndian- 我也投票决定关闭它。 :-) 我通常更擅长避免重复的问题。
  • @vonbrand- 这纯粹是出于好奇。我知道对于长位域和高精度整数有很好的库。

标签: c++ c struct bit-fields


【解决方案1】:

在 C11 中,第 6.7.2.1 节,第 4 条:

指定位域宽度的表达式应该是一个整数常量表达式,其非负值不超过在省略冒号和表达式的情况下将指定的类型的对象的宽度。如果值为零,则声明不应有声明符。

所以简而言之,如果它没有位域部分,它必须在零和类型的大小之间。

【讨论】:

  • 从原始问题的答案中可以看出,在 C++ 中这样做是合法的,但这样做会忽略额外的位。
  • 我们如何知道物体的宽度?
  • @David: sizeof(type) * CHAR_BIT 其中type 是您的类型,它必须是_Boolsigned intunsigned int 或其他定义的实现之一的合格或不合格版本-类型。
【解决方案2】:

位域“myInt”的大小(1000 位)不能超过其类型的大小(int,通常为 32 位)

【讨论】:

    猜你喜欢
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多