码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-09-04 18:49:09      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:style   color   io   数据   cti   sp   on   c   c++   

正解「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

标签:style   color   io   数据   cti   sp   on   c   c++   

原文地址:http://www.cnblogs.com/gomopsivarh/p/3956493.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!