是有符号的十六进制文字

Are signed hexdecimal literals possible?

本文关键字:十六进制 文字 符号      更新时间:2023-10-16

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

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

是否有办法在十六进制中设置字面量,为了简单地设置位,而不让编译器认为它们是无符号的?

您描述您只想将这些值用作位操作的操作数。在这种情况下,总是使用无符号数据类型

看起来您只是想要一个unsigned int数组用于您的位掩码:

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