【发布时间】:2012-01-13 13:44:01
【问题描述】:
例如
size_t x = -1u;
if (x == -1u)
...
有效吗?
如果这是有效的,它将阻止警告。 当然在 32 位系统上 x 应该是 0xffffffff 而在 64 位系统上 系统应该是0xffffffffffffffff。
-乔辰
【问题讨论】:
-
文字总是非负数。这被解析为
-(1u)。 -
如果你的目标是在 32 位系统上获得
0xFFFFFFFF和在 64 位系统上获得0xFFFFFFFFFFFFFFFF,那么写size_t x = ~0U不是更清楚吗? -
~0U 是所有位,-1U 是可能的最高数字。
-
@ruakh ...尽管这并不能解决
size_t比unsigned int更宽的问题,这可能是OP 的想法。表达式~0U的计算结果与UINT_MAX相同。 -
@Complicatedseebio:好点;我想它必须是
~((size_t)0U)。或者只是SIZE_MAX,假设 C99。