这段代码中~0是什么意思?

Ami*_*mir 16 c++

这段代码中〜0的含义是什么?
有人可以为我分析这段代码吗?

unsigned int Order(unsigned int maxPeriod = ~0) const
{
    Point r = *this;
    unsigned int n = 0;
    while( r.x_ != 0 && r.y_ != 0 )
    {
        ++n;
        r += *this;
        if ( n > maxPeriod ) break;
    }
    return n;
}
Run Code Online (Sandbox Code Playgroud)

JSB*_*ոգչ 25

~0是按位补码0,是一个填充了所有位的数字.对于无符号的32位int,那就是0xffffffff.确切的fs 数取决于您分配~0给的值的大小.

  • 实际上,`0`是`int`类型,因此`~`运算符应用于有符号值.如果我没有弄错的话,这种操作的结果是实现定义的. (27认同)
  • 我相信这是明确的.标准的相关部分(C89,3.3.3.3,"一元算术运算符")说:"如果E被提升为无符号长整型,则表达式~E等于(ULONG_MAX-E),如果是(UINT_MAX-E),则等于(UINT_MAX-E) E被提升为unsigned int类型." (2认同)
  • 真的,这并不重要,因为它们都是获取代码似乎想要的值的糟糕方式。在 C 中有宏,在 C++ 中有 numeric_limits。 (2认同)

sta*_*ker 17

它是一个补码,它反转所有位.

 ~  0101 => 1010
 ~  0000 => 1111
 ~  1111 => 0000
Run Code Online (Sandbox Code Playgroud)


ava*_*kar 9

正如其他人所提到的,~运算符执行按位补码.但是,对标志值执行操作的结果不是由标准定义的.

特别是,价值~0不必是-1,这可能是预期的价值.将默认参数设置为

unsigned int maxPeriod = -1
Run Code Online (Sandbox Code Playgroud)

maxPeriod包含最高可能值(签名为无符号转换定义为赋值模2**n,其中n是给定无符号类型的特征数(表示的位数)).

另请注意,默认参数在C中无效.