为什么-3 ==〜2在C#

无法理解。 为什么产量是“平等的”

码:

if (-3 == ~2) Console.WriteLine("equal"); else Console.WriteLine("not equal"); 

输出:

 equal 

因为二进制补码比特算术就是这样

从维基百科页面上掏出并展开:

 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 

所以你得到:

 0 0 0 0 0 0 1 0 = 2 1 1 1 1 1 1 0 1 = -3 

正如你所看到的,所有的位都被翻转了,这就是位运算符( ~ )所做的。

这个计算器后解释了为什么:

什么是枚举定义中的代字号(〜)?

是一元补码操作符 – 它翻转操作数的位。 在二进制补码运算中,〜x == -x-1

这是由于有符号整数的二进制补码表示: http : //en.wikipedia.org/wiki/Twos_complement

因为它使用了两个补码。

这两个运营商之间有很大的区别。

“〜运算符对其操作数执行按位补码操作,这会对每一位进行反转。按位补码操作符是为int,uint,long和ulong预定义的。

MSDN

2的补码是:

1 … 1101

(有符号的)2的补码是:

1 … 1101

这很容易做到:

补码:翻转位。 两个补码:补码+ 1。

为什么这是有用的? 计算机可以通过简单的翻转和添加来减去数字。