为什么相同的十六进制值的异或和减法会得到相同的结果?

发布于 2025-01-14 07:04:31 字数 93 浏览 0 评论 0原文

例如:

7A - 20 = 5A

7A XOR 20 = 5A

当然,使用不同的值也会产生相同的效果。为什么会出现这种情况呢?

For example:

7A - 20 = 5A

7A XOR 20 = 5A

Of course, this will work the same using different values. Why does this occur exactly?

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

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

发布评论

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

评论(1

花桑 2025-01-21 07:04:31

只有在没有借用的情况下才一样
即任何位位置都没有 0 - 1,只有 1-0 = 11-1 = 0

这相当于说第一个操作数(被减数)在第二个操作数(减数)所做的任何地方都设置了位。

即如果 x & y == y,然后xy == x^y

最简单的反例:

  • 0 - 1 = 0xFF - 借位一直传播到寄存器的顶部。
  • 0 ^ 1 = 0x01 - XOR 是无进位加法,它只是翻转一个操作数中设置了另一个操作数中的位的位。 (即,您可以将其视为翻转 1 中的任何位,留下 1。或者翻转 0 中的低位,产生 1。)

XOR 是可交换的(x ^ y == y ^ x),减法不是(xy 通常与 yx< /code>,除了特殊情况的结果,例如00x80

使用相同的值重复 XOR 可将其撤消,例如 5A ^ 20 = 7A 会将该位翻转回来。
但重复减法则不会:5A - 20 = 3A

It's only the same if there are no borrows,
i.e. no 0 - 1 at any bit-positions, only 1-0 = 1 or 1-1 = 0.

That's the same as saying that the first operand (the minuend) has set bits everywhere the second operand (subtrahend) does.

i.e. if x & y == y, then x-y == x^y.

The simplest counter-example:

  • 0 - 1 = 0xFF - borrow propagates all the way to the top of the register.
  • 0 ^ 1 = 0x01 - XOR is add-without-carry, it just flips the bits in one operand where a bit is set in the other operand. (i.e. you could look at it as flipping no bits in 1, leaving 1. Or as flipping the low bit in 0, producing 1.)

XOR is commutative (x ^ y == y ^ x), subtraction is not (x-y is usually different from y-x, except for special-case results like 0 or 0x80)

Repeating XOR with the same value undoes it, e.g. 5A ^ 20 = 7A flips the bit back on.
But repeating subtraction doesn't: 5A - 20 = 3A.

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