首页 > 代码库 > [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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。