正解「x = -1;」
-1超出无符号整型x的表达范围,根据标准(C++11 section 4.7.2),-1将被转化为2^n-1(n为x的bit数)。
不正解 「x = 0xFFFFFFFF;」
这只适用于32bit整型。
不正解「x = ~0;」
这个被很多书认定为「标准答案」的解答也是错的。C/C++标准支持原码/反码/补码三种负数表示形式,只有在补码环境下才会得到正确结果。(例如在反码下,~0将得到-0,-0转为无符号仍然是0)
那么x = ~0u呢?
仍然是错的。根据标准(C++11 section 2.14.2.2),字面量0u是unsigned int。那么取反后得到的是UINT_MAX,如果x可表示的最大值不是UINT_MAX那么结果就是错的。
时间: 2024-10-13 12:17:31