首页 > 代码库 > [C/C++]如何将一个无符号整型所有数据位置为1

[C/C++]如何将一个无符号整型所有数据位置为1

正解「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那么结果就是错的。

[C/C++]如何将一个无符号整型所有数据位置为1