我有一个位掩码数组,其目的是使用它们来清除一个整数的指定数量的最低有效位,该整数被用作一组标志。它的定义如下:
int clearLow[10]=
{
0xffffffff, 0xfffffffe, 0xfffffffc, 0xfffffff8, 0xfffffff0, 0xffffffe0, 0xffffffc0, 0xffffff80, 0xffffff00, 0xfffffe00
};
我最近切换到使用gcc 4.8我发现这个数组开始抛出警告,
warning: narrowing conversion of ‘4294967295u’ from ‘unsigned int’ to ‘int’ inside { } is ill-formed in C++11
etc
etc
显然,我的十六进制文字被视为unsigned int
s并且修复很容易,老实说,我不在乎这个数组是int
还是unsigned int
它只需要每个单元格中设置的相应位,但我的问题是:
为了简单地设置位,有没有办法以十六进制设置文字,而编译器没有假设它们是无符号的?
答案 0 :(得分:4)
您描述了您只想将值用作位操作的操作数。在这种情况下,只需使用无符号数据类型。这是一个简单的解决方案。
答案 1 :(得分:2)
看起来你只想要一个unsigned int
数组用于掩码:
const unsigned clearLow[] = {
0xffffffff, 0xfffffffe, 0xfffffffc, 0xfffffff8, 0xfffffff0, 0xffffffe0, 0xffffffc0, 0xffffff80, 0xffffff00, 0xfffffe00
};