gpt4 book ai didi

c++ - 异或两个变量并将结果添加到第三个变量适用于运算符 += 但不适用于运算符 = 和 + 组合使用

转载 作者:搜寻专家 更新时间:2023-10-31 00:06:26 25 4
gpt4 key购买 nike

我有一些代码对两个变量执行按位异或运算 (^) 并将结果添加到第三个变量。

事实证明,以下两个语句会产生不同的结果:

checksum += digit ^ (2 * checksum);               //correct result
checksum = checksum + digit ^ (2 * checksum); //incorrect result

为什么会这样?
(编辑:我更改了问题以专门针对导致我的程序出现问题的问题。)

最佳答案

这个表达式

checksum = checksum + digit ^ (2 * checksum);

被评价为

checksum = ( checksum + digit ) ^ (2 * checksum);

因为按位异或运算符 ^ 的优先级低于加法运算符 +。

这个表达式

checksum += digit ^ (2 * checksum);

被评价为

checksum = ( checksum ) + ( digit ^ (2 * checksum) );

就是在这个复合赋值运算符中

checksum += digit ^ (2 * checksum);

表达式 digit ^ (2 * checksum) 被评估并添加到 checksum 的值中。

来自 C++ 17 标准(8.5.18 赋值和复合赋值运算符)

7 The behavior of an expression of the form E1 op = E2 is equivalent to E1 = E1 op E2 except that E1 is evaluated only once. In += and -=, E1 shall either have arithmetic type or be a pointer to a possibly cv-qualified completely-defined object type. In all other cases, E1 shall have arithmetic type.

所以有两个表达式 E1E2 被求值,然后二元运算符 op 应用于它们。

关于c++ - 异或两个变量并将结果添加到第三个变量适用于运算符 += 但不适用于运算符 = 和 + 组合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57729725/

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