gpt4 book ai didi

有人可以解释一下为什么我对以下代码得到两个不同的答案吗?

转载 作者:行者123 更新时间:2023-11-30 14:35:50 25 4
gpt4 key购买 nike

#include <stdio.h>
int main()
{
int x = 2, y = 0;
int m = (y |= 10);
int z = y && m;
printf("%d\n", z);
return 0;
}

上面的程序给我的输出为 1。下面的代码给我的输出为 0,但是这里输出不同的原因是什么?

#include <stdio.h>
int main()
{
int x = 2, y = 0;
int z = y && (y |= 10);
printf("%d\n", z);
return 0;
}

最佳答案

int z = (y |= 10);

y10 屏蔽,因此设置为 10,因此 y && m 是一个 bool 值 1 因为 ym 均非零,分配给 z

现在,

int z = y && (y |= 10);

y == 0 所以 && 短路,不评估右侧部分并且不改变 y 的值。因此,z 设置为 0。

您是否使用过:

int z = y & (y |= 10);

这取决于编译器评估操作数的方式/顺序(实现定义的行为以获得 010)

请注意,如果第一个参数为零,&& 短路不会评估第二个参数有充分的理由:

if ((pointer != NULL) && pointer->value == 12) { do_something(); }

此条件检查值是否为 12,但仅检查指针是否为非 NULL。如果先计算第二个表达式,则可能会崩溃。

关于有人可以解释一下为什么我对以下代码得到两个不同的答案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58353102/

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