签名的十六进制文字可能吗?

时间:2014-03-26 18:13:27

标签: c++ c++11 literals

我有一个位掩码数组,其目的是使用它们来清除一个整数的指定数量的最低有效位,该整数被用作一组标志。它的定义如下:

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它只需要每个单元格中设置的相应位,但我的问题是:

为了简单地设置位,有没有办法以十六进制设置文字,而编译器没有假设它们是无符号的?

2 个答案:

答案 0 :(得分:4)

您描述了您只想将值用作位操作的操作数。在这种情况下,只需使用无符号数据类型。这是一个简单的解决方案。

答案 1 :(得分:2)

看起来你只想要一个unsigned int数组用于掩码:

const unsigned clearLow[] = {
    0xffffffff, 0xfffffffe, 0xfffffffc, 0xfffffff8, 0xfffffff0, 0xffffffe0, 0xffffffc0, 0xffffff80, 0xffffff00, 0xfffffe00
};