【问题标题】:int max = ~0; What does it mean?整数最大值 = ~0;这是什么意思?
【发布时间】:2011-06-13 12:08:53
【问题描述】:

int max = ~0;

什么意思?

【问题讨论】:

标签: c# bitwise-operators


【解决方案1】:

~ 操作符有点反,所以 ~0 给你一个全为 1 的整数值(二进制)。

【讨论】:

    【解决方案2】:

    它是字节 0000....0000 的按位否定。它是所有位都设置为 1 的整数值。

    在无符号情况下,它将是最大可能值。在有符号的情况下,它是 -1。

    【讨论】:

      【解决方案3】:

      ~ 是补码运算符,它翻转操作数的位。由于零没有设置位,因此补码将设置所有位,这也是最大大小的整数(假设无符号)。对于带符号的数字,您将得到 -1,因此称其为“max”有点用词不当。

      【讨论】:

        【解决方案4】:

        按位补码。
        http://msdn.microsoft.com/en-us/library/d2bd4x66.aspx

        文字 0(如上面的代码)是一个 int。
        int 是一个 32 位二进制值。值 0 将所有位设置为 0。

        ~ 运算符是按位恭维。即我交换所有位。
        因为所有的位都是 0,所以它们都变成了 1。所以我们有一个 32 位的值
        所有位都设置为 1。

        C# sharp 使用 2 恭维。它将 int 中的 -1 编码为所有位为 1

        0000 0000 0000 0000 0000 0000 0000 0000   == 0
        
        operator ~
        
        1111 1111 1111 1111 1111 1111 1111 1111   == -1
        

        所以 => ~0 == -1

        【讨论】:

          【解决方案5】:

          ~ 表示不按位,它反转给定整数中的所有位。在带符号的 int 中,这将为您提供 -1(因为 int 中的所有位都将从 0 翻转到 1。)查找二进制补码以获取有关此二进制补码的更多信息。

          在 unsigned int (uint) 中,这将为您提供整数的最大值(因为 unsigned int 中的最高有效位不能确定符号。)

          【讨论】:

            【解决方案6】:

            如前所述,~0 产生 0xFFFFFFFF。

            但是,我怀疑原来的程序员很困惑。执行int max = ~0 ; 将有符号整数max 设置为值-1。

            【讨论】:

              【解决方案7】:

              ~ 运算符是计算按位补码的一元按位补码运算符。这意味着它将反转其参数中的所有位(0 变为 1,1 变为 0)。因此,

              int max = ~0;
              

              max 设置为 32 位值 0000 0000 0000 0000 0000 0000 0000 0000 的否定,从而导致 1111 1111 1111 1111 1111 1111 1111 1111。由于我们将此结果存储在Int32 中,因此这与-1 相同。

              说得好不好

              int max = ~0;
              

              int max = -1;
              

              取决于上下文。如果max 的目的是要有一个所有位都是1 的数字,我会选择前者。如果max 的目的是计算非负整数列表的最大值,我会选择后者(好吧,我更喜欢int max = Int32.MinValue;,甚至更喜欢int max = list.Max();) .

              【讨论】:

                【解决方案8】:

                正如其他人所说,~ 是按位否定运算符。它将获取整数值的所有位并切换 0 和 1(0 -> 1 和 1 -> 0)。

                对于有符号整数或 Int32,~0 等于 -1。

                当您实现某种基于层的过滤系统时,通常使用 ~0 或 -1 作为“全包”掩码(星号),其中您使用默认等于 -1 的“layerMask”参数意味着它将返回任何东西(不过滤)。过滤器确实使用了 AND 操作(valueToFilter & layerMask)。

                如果 valueToFilter 也非零,

                valueToFilter & -1 将始终非零。否则为零。

                【讨论】:

                  猜你喜欢
                  • 2019-04-25
                  • 2013-05-28
                  • 2011-08-23
                  • 1970-01-01
                  • 2013-02-01
                  • 2018-01-15
                  • 1970-01-01
                  • 2015-03-20
                  • 2020-01-07
                  相关资源
                  最近更新 更多