为什么-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。
为什么这是有用的? 计算机可以通过简单的翻转和添加来减去数字。