在C ++中将〜0u赋值给变量是什么意思?

时间:2014-10-24 19:43:43

标签: c++

我理解 0u 表示0无符号,但开头的 ~ 是什么意思?在这种情况下它是表示反转还是其他意思?

4 个答案:

答案 0 :(得分:41)

它表示不按位;整数中的所有位都将被翻转,在这种情况下会产生一个所有位都为1的数字。

注意,由于它是无符号的,如果在赋值期间整数被加宽,则扩展位将为0.例如假设unsigned short是2个字节而unsigned int是4:

unsigned short s = ~0u; // 0xFFFF
unsigned int i = s;     // 0x0000FFFF

如果您需要反转某些通用数字类型T的位,则可以使用构造~(T(0))

答案 1 :(得分:9)

在C标准中比在C ++标准中更好地描述了该运算符

  

4~运算符的结果是它的按位补码   (提升)操作数(也就是说,结果中的每个位都是设置的   如果未设置转换后的操作数中的相应位)。该   对操作数执行整数提升,结果为   推广类型。如果提升的类型是无符号类型,则   表达式~E等于其中可表示的最大值   类型减去E.

因此~0u表示当其内部表示的每个位设置为1时unsigned int类型的对象的最大值。

考虑使用运算符来设置例如前n位为1.表达式看起来像

~( ~0u << n )

如果要从m位置开始设置n位,则可以写

~( ~0u << n ) << m

答案 2 :(得分:9)

这意味着按位而不是通过给出一个所有位都设置为1的数字来翻转整数值的所有位。

(Assuming a 32 bit uint)
   0u
   00000000 00000000 00000000 00000000

   ~0u
   11111111 11111111 11111111 11111111

   3
   00000000 00000000 00000000 00000011

   ~3
   11111111 11111111 11111111 11111100

如果 ,机器使用2's complement表示负整数,则将~0u转换为有符号整数等同于{{1} }。有关此内容的更多信息,请参阅Stack Overflow问题 Is there a difference between -1 and ~0?

答案 3 :(得分:3)

以位为单位反转值。例如:

00000000000000000001

11111111111111111110

这是~的作用。