gpt4 book ai didi

c++ - add 的位运算

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:28 26 4
gpt4 key购买 nike

你能帮我弄清楚为什么以下表达式为真:x + y = x ^ y + (x & y) << 1

我正在从按位逻辑中寻找一些规则来解释这个数学等价物。

最佳答案

这就像解决一个普通的以 10 为底的加法问题 955 + 445,首先将所有列单独相加并丢弃带进位的 1:

    955
445
-----
390

然后找到应该有进位 1 的所有列:

    955
445
-----
101

将其移动并将其添加到原始结果中:

   390
+ 1010
------
1400

所以基本上您是在做加法,但忽略所有进位的 1,然后作为一个单独的步骤在后面添加进位的。

在基数 2 中,当任一位为 0 时,XOR (^) 正确执行加法。当两位都为 1 时,它会执行不带进位的加法,就像我们在上面的第一步中所做的那样。

x ^ y 正确地添加了 xy 不都是 1 的所有位:

   1110111011
^ 0110111101
-------------
1000000110 (x ^ y)

x & y 在所有两位均为 1 的列中为我们提供一个 1。这些正是我们错过进位的列:

   1110111011
& 0110111101
-------------
0110111001 (x & y)

当然,当你在做加法时携带一个 1 时,你会将它左移一位,就像你以 10 为底数相加一样。

   1000000110      (x ^ y)
+ 01101110010 + (x & y) << 1
-------------
10101111000

关于c++ - add 的位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21092047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com