大整数隐式截断为无符号类型

时间:2017-01-26 00:42:05

标签: c++ gcc visual-c++ warnings bit-fields

我试图确定位域中可能的最大值,我做的是:

pip develop

MSVC很好,但GCC 4.9.2给了我一个警告:

using namespace std;

struct A{
    unsigned int a:1;
    unsigned int b:3;
};

int main()
{
   A aa;
   aa.b = ~0U;
   return 0;
}

想知道如何摆脱它(假设我不知道该字段的位宽,我想知道它中最大可能值是多少)。

1 个答案:

答案 0 :(得分:0)

您可以尝试解决此问题,如下所示

aa.b = 1;
aa.b = -aa.b;

请注意,位字段的值表示方面(包括其范围)目前在语言标准中未详细说明,该标准被认为是C ++标准中的缺陷。这很奇怪,特别是考虑到文档的其他部分(例如枚举类型的规范)为了它们自己的目的而试图依赖于可表示的位域值的范围。这应该是taken care of in the future