一个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
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;
}