大整数隐式截断为无符号类型
Large integer implicitly truncated to unsigned type
我试图确定位域中的最大可能值,我所做的是:
using namespace std;
struct A{
unsigned int a:1;
unsigned int b:3;
};
int main()
{
A aa;
aa.b = ~0U;
return 0;
}
MSVC 没问题,但 GCC 4.9.2 给了我一个警告:
warning: large integer implicitly truncated to unsigned type [-Woverflow]
想知道如何摆脱它(假设我不知道该字段的位宽,我想知道它的最大可能值是多少)。
您可以尝试按以下方式解决此问题
aa.b = 1;
aa.b = -aa.b;
请注意,bit-fields 的 value-representation 方面,包括它们的范围,目前在语言标准中未指定,这被认为是 C++ 标准中的一个缺陷。这很奇怪,特别是考虑到文档的其他部分(例如枚举类型的规范)试图依赖 bit-fields 的可表示值范围来达到他们自己的目的。这应该是 taken care of in the future.
我试图确定位域中的最大可能值,我所做的是:
using namespace std;
struct A{
unsigned int a:1;
unsigned int b:3;
};
int main()
{
A aa;
aa.b = ~0U;
return 0;
}
MSVC 没问题,但 GCC 4.9.2 给了我一个警告:
warning: large integer implicitly truncated to unsigned type [-Woverflow]
想知道如何摆脱它(假设我不知道该字段的位宽,我想知道它的最大可能值是多少)。
您可以尝试按以下方式解决此问题
aa.b = 1;
aa.b = -aa.b;
请注意,bit-fields 的 value-representation 方面,包括它们的范围,目前在语言标准中未指定,这被认为是 C++ 标准中的一个缺陷。这很奇怪,特别是考虑到文档的其他部分(例如枚举类型的规范)试图依赖 bit-fields 的可表示值范围来达到他们自己的目的。这应该是 taken care of in the future.