【问题标题】:In C, can you have a 128-bit bitfield [duplicate]在 C 中,你能有一个 128 位的位域吗?
【发布时间】:2016-12-21 16:25:14
【问题描述】:

下面的代码合法吗?

struct BigInt {
     uint64_t a : 128;
};

【问题讨论】:

  • 看起来像一个 XY 问题。你为什么认为你想要这个?

标签: c int


【解决方案1】:

位域必须适合单个 int,因此除非int 在您的平台上是 128 位,否则您将不走运。

(在编辑之前,您还在struct 末尾缺少;。)

【讨论】:

  • 位域基本类型_Boolintunsigned int 是有保证的。所以在一个 128 位 int 的实现上,会有一个 128 位的位域。一个实现可以提供更多类型。考虑到一些在较小架构上支持 128 位整数,可能还会有 128 位位域。
【解决方案2】:

在标准 C11 中不合法(在大多数平台上;原则上,int 可能是 128 位,但我从未遇到过具有该功能的平台)。阅读n1570(规范草案)。

但在某些平台上,最近的编译器(例如GCC 6)提供了__int128 as an extension。您不会将其用作位域,而是用作某种整数类型。

另请参阅this 对相关问题的回答。

【讨论】:

  • 阅读整个标准? sn-p 怎么样?
  • 1) 该标准确实允许 128 位 int,因此可以有 128 位位域。 2) 该标准允许实现支持其他类型的位域。所以__int128 可以用作位域。结论:标准不允许! (实际的问题是它有什么用处)。
猜你喜欢
  • 2013-08-28
  • 1970-01-01
  • 2023-03-10
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
相关资源
最近更新 更多