1.&&逻辑运算符的坑
int x=0,y=0,z=0; z = (x==1) && (y=2); printf("%d",y);//y=0;
今天遇到了同学问的问题,为什么y输出为0.
我第一时间也记不得,工作中一般不会写这种代码,但是却不能忽略。
通过查阅资料,也很快明了。
在 C/C++ 中,逻辑运算符 && 表示逻辑与运算。当 && 运算符的左边表达式的值为假(即 0),那么右边的表达式不会被计算,因为无论右边的表达式是真还是假,整个逻辑与表达式的结果都为假。这种情况下,右边的表达式被称为“短路”(short-circuit),因为它没有被完全计算。
例如,考虑以下代码:
int a = 5; int b = 10; if (a == 5 && b++ == 10) { // do something }
在这个代码中,a == 5 的值为真,但是 b++ == 10 的值为假,因为 b++ 的结果是 10,但是它与 10 不相等。因此,整个逻辑与表达式的结果为假,右边的表达式 b++ == 10 没有被计算,b 的值仍然是 10。
另外,逻辑或运算符 || 也有类似的短路行为。当 || 运算符的左边表达式的值为真时,右边的表达式不会被计算,因为无论右边的表达式是真还是假,整个逻辑或表达式的结果都为真。
同学们,理解了吗?点赞了吗?