august 发表于 2007-2-5 15:25:32

再问个逻辑运算问题

#define S x=y=z
#define P3(x,y,z) printf("x=%d\ty=%d\tz=%d\n",x,y,z)
main{}
{
int x,y,z;
S=1;++x||++y||++z;P3(x,y,z);
}
为什么答案是2,1,1呢?我记得是若||一端为1就不必计算另一端,但是先计算++x的,那时就是2了并不是等于1,为什么后面的++y,没有跟着增值呢?

Saiholmes 发表于 2007-2-5 15:32:11

真值是 非0 而不是单单指1...2也算真值
||左边为真那么后面自然就不计算了

Zelsazgh 发表于 2007-3-10 00:53:50

我个人认为是编译器的优化的问题

lw 发表于 2007-3-11 19:43:32

同意楼上的,而且其实合并把++等写在一起看起来好似很节约空间,实际上反而在搞混自己和以后的阅读者,偶还是希望楼主不要用这种容易搞错的方式编写而是分开

因为基本上这些代码从编译角度来看还是会大部分被分开的……
页: [1]
查看完整版本: 再问个逻辑运算问题