为什么在C#中-3 == ~2

Jav*_*ram 37 .net c# bitwise-operators twos-complement conditional-statements

无法理解.为什么输出"平等"

码:

 if (-3 == ~2)           
    Console.WriteLine("equal");
 else
    Console.WriteLine("not equal");
Run Code Online (Sandbox Code Playgroud)

输出:

equal
Run Code Online (Sandbox Code Playgroud)

Dan*_*olo 61

因为二进制补码运算就是这样

来自维基百科页面并进行了扩展:

Most
Significant
Bit          6  5  4  3  2  1  0   Value
0            0  0  0  0  0  1  1   3
0            0  0  0  0  0  1  0   2
0            0  0  0  0  0  0  1   1 
0            0  0  0  0  0  0  0   0
1            1  1  1  1  1  1  1   -1
1            1  1  1  1  1  1  0   -2
1            1  1  1  1  1  0  1   -3
1            1  1  1  1  1  0  0   -4
Run Code Online (Sandbox Code Playgroud)

所以你得到:

0  0  0  0  0  0  1  0  =  2
1  1  1  1  1  1  0  1  = -3
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,所有位都被翻转,这就是按位NOT运算符(~)的作用.

  • 对于那些好奇为什么负数以这种方式表示的人,尝试将-1加1并看看你如何到达零:-) (7认同)

Jam*_*man 8

这个stackoverflow帖子解释了原因:

枚举定义中的波浪号(〜)是多少?

是一元的补码运算符 - 它会翻转其操作数的位.在二进制补码算法中,~x == -x-1