【发布时间】:2016-10-29 07:41:49
【问题描述】:
为什么会打印ffffffff?
#define MYMACRO(n) (((uint16_t)0 - 1) >> (16 - (n)))
std::cout << std::hex << MYMACRO(1);
虽然这会打印 1?
#define MYMACRO(n) (((uint32_t)0 - 1) >> (32 - (n)))
std::cout << std::hex << MYMACRO(1);
我用 GCC 和 cpp.sh 尝试过。
【问题讨论】:
-
通常的算术转换。据推测,
uint16_t被提升为int(恰好是 32 位)。 -
这是因为 1 的类型为
int。 -
至关重要的是,在您的平台上,
int是比uint16_t更大/更宽的整数类型。