首页 > 解决方案 > 整数常量的无符号类型

问题描述

我对整数常量的类型感到困惑,如下所述

在第一行,如果一个常量以没有. 结尾'u',为什么十进制常量必须是signed类型,而八进制或十六进制常量可以是unsigned类型?

我认为如果signed版本不适合将常量作为无符号版本有问题,例如:

long long l1 = 0xffffffff + 0xffffffff;  // 0xffffffff is unsigned int
long long l2 = 4294967295 + 4294967295;  // 4294967295 is signed long 

l1 是 fffffffe,而 l2 是 1ffffffffe。显然 l1 是错误的

标签: c

解决方案


如果我要说,我会回答十六进制和八进制数字比十进制数字更接近地表示位模式,因此 C 标准委员会决定即使没有U后缀,十六进制和八进制数字也可能是无符号的。

想想有多少人会写这样的代码:

uint32_t b = a & 0xFFFFFFF0;

uint32_t b = a & 4294967280; // or -15?

推荐阅读