是的,我知道,这对于谷歌来说似乎是理所当然的。我很清楚这与x += y做同样的事情x = x + y。这不是我的问题。
我的问题是这行代码到底在做什么(取自SplitMix64 PRNG代码):
uint64_t z = (x += 0x9e3779b97f4a7c15);
Run Code Online (Sandbox Code Playgroud)
注意该行中间的+=。(要明确的是,x也是一个uint64_t。)
我认为这会做的是:
x并产生结果。x.z。快速测试让我觉得我可能是对的:
#include <stdio.h>
int main() {
int x;
int y;
x = 5;
y = (x += 6);
printf("%d\n", x);
printf("%d\n", y);
}
Run Code Online (Sandbox Code Playgroud)
这在我的系统上打印“11”两次(用简单的编译gcc test.c)。
可以肯定的是,我想确认这就是事情的工作原理(并且还查明在使用 += 及其同级时是否会遇到其他奇特的极端情况)。我在搜索尝试中找不到有关此内容的信息(所有内容似乎都假设您在简单的x += y场景中使用 += )。