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

发布于 2024-10-08 06:54:17 字数 240 浏览 9 评论 0原文

无法理解。为什么输出是“相等”

代码:

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

输出:

equal

Unable to understand. Why output is "equal"

code:

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

output:

equal

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

沦落红尘 2024-10-15 06:54:17

因为二进制补码位算术使得它如此

从维基百科页面抄袭并扩展:

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

正如您所看到的,所有位都被翻转,这就是 按位非运算符 (~) 可以。

Because two's complement bit-arithmetic makes it so

Cribbed from the wikipedia page and expanded:

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

So you get:

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

And as you can see, all the bits are flipped, which is what the bitwise NOT operator (~) does.

再浓的妆也掩不了殇 2024-10-15 06:54:17

这篇 stackoverflow 帖子解释了原因:

枚举定义中的波浪号 (~) 是什么?

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

This stackoverflow post explains why:

What is the tilde (~) in the enum definition?

is the unary one's complement operator -- it flips the bits of its operand.
in two's complement arithmetic, ~x == -x-1

江心雾 2024-10-15 06:54:17

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

It's due to the two's complement representation of signed integers: http://en.wikipedia.org/wiki/Twos_complement

雪化雨蝶 2024-10-15 06:54:17

因为它使用二进制补码。

Because it uses two's complement.

何以畏孤独 2024-10-15 06:54:17

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

“〜运算符执行按位
对其操作数求补运算,
这具有反转每个的效果
少量。按位求补运算符是
为 int、uint、long 和 预定义
乌龙。”

msdn

There is a big difference between these two operators.

"The ~ operator performs a bitwise
complement operation on its operand,
which has the effect of reversing each
bit. Bitwise complement operators are
predefined for int, uint, long, and
ulong."

msdn

﹉夏雨初晴づ 2024-10-15 06:54:17

3 的补码是:

1...1101

2 的(有符号)补码是:

1...1101

很容易做到:

补码:翻转位。
二进制补码:一个补码 + 1。

为什么这有用?计算机可以通过简单的位翻转和加法来进行数字减法。

The two's complement of 3 is:

1...1101

The (signed) one's complement of 2 is:

1...1101

It's easy to do:

One's complement: Flip the bits.
Two's complement: One's complement + 1.

Why is this useful? Computers can subtract numbers by simply bit flipping and adding.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文