#include "stdafx.h"
#include <stdio.h>int main(int argc, char* argv[])
{
int x,y,z;
x=y=z=0; ++x||++y&&++z;printf("%d%d%d\n",x,y,z);
x=y=z=-1;++x||++y&&++z;printf("%d%d%d\n",x,y,z);
x=y=z=1; ++x&&++y||++z;printf("%d%d%d\n",x,y,z); x=y=z=0; x++||y++&&z++;printf("%d%d%d\n",x,y,z);
x=y=z=-1;x++||y++&&z++;printf("%d%d%d\n",x,y,z);
x=y=z=1; x++&&y++||z++;printf("%d%d%d\n",x,y,z);
x=y=z=0; x++&&y++||z++;printf("%d%d%d\n",x,y,z); return 0;
}如果用VC编译器,输出是什么?通过这道题,大家来深刻认识一下,加深印象当然,实际中开发中不会有这样的代码有几个人能第一次答对的啊,呵呵
#include <stdio.h>int main(int argc, char* argv[])
{
int x,y,z;
x=y=z=0; ++x||++y&&++z;printf("%d%d%d\n",x,y,z);
x=y=z=-1;++x||++y&&++z;printf("%d%d%d\n",x,y,z);
x=y=z=1; ++x&&++y||++z;printf("%d%d%d\n",x,y,z); x=y=z=0; x++||y++&&z++;printf("%d%d%d\n",x,y,z);
x=y=z=-1;x++||y++&&z++;printf("%d%d%d\n",x,y,z);
x=y=z=1; x++&&y++||z++;printf("%d%d%d\n",x,y,z);
x=y=z=0; x++&&y++||z++;printf("%d%d%d\n",x,y,z); return 0;
}如果用VC编译器,输出是什么?通过这道题,大家来深刻认识一下,加深印象当然,实际中开发中不会有这样的代码有几个人能第一次答对的啊,呵呵
解释一下:
c/c++语言中关于布尔表达式的求值问题是这样的一个原则,
只有当表达式的值无法确定时,才继续计算。
x=y=z=0; ++x||++y&&++z;
++x=1,所以整个表达式为1,++y,++z不计算。
x=y=z=-1;++x||++y&&++z;printf("%d%d%d\n",x,y,z);
++x=0,无法确定表达式的值,所以计算++y,y=0可知表达式的值为0,不计算++z
其它的同理可得。