一个C++的问题,高手解答下

来源:百度知道 编辑:UC知道 时间:2024/06/02 09:36:49
#include<iostream.h>
int main()
{
int a=8,b=4,k=4,m=8;
cout<<a<<b<<c<<k<<m<<n<<endl;
if(a!=b||m!=a+b)
{
a=2*k!=!m;
a=a+a;
}
cout<<a<<endl;
return 0;
}
//cout<<a;a等于多少啊?为啥=2我算是24

a!=b 条件成立,执行下面

a=2*k!=!m;
a=a+a;

a = (2X4) != 0//8为真,非真得假
相当于 a = (8 != 0) 得正数 1
a = 1+1; 得2

在a=2*k!=!m; 中,先运行的是右边的2*k!=!m,结果为1,然后赋值给a,所以最后a=2.这是关于运算符的优先级的问题

这么看:

a=2*k!=!m;
a=a+a;

上面这两句是这么执行的:
a=2*k!=!m;
从右向左计算:a=(2*k!=!m);
m等于8,!m就等于0,2*k=8
所以2*k不等于!m,2*k!=!m成立,表达式的值为1
所以a=1

a=a+a=1+1=2

在编译器里直接就运行得到结果了,结果是2。
#include<iostream.h>
void main()
{
int a=8,b=4,k=4,m=8;
if(a!=b||m!=a+b)
{
a=2*k!=!m;
a=a+a;
}
cout<<a<<endl;
}