关于C++语言的逻辑关系和运算优先的问题!!!请高手指教!!!

来源:百度知道 编辑:UC知道 时间:2024/06/21 06:30:43
int a=8,k=4,m=8;
a=2*k!=!m;
a=a+a;
前面的都省略,只谈重点!!!
我想问:在这个程序中,最后a=2是怎么算出来的?
它是怎样遵循操作符的优先级的?
我的理解是先计算‘逻辑非’运算,也就是"!m",然后计算‘算术运算’,也就是"2*k",然后计算“关系运算’,也就是"!=",最后a=2是怎么来的我就不明白了?还有就是"!m",算什么,难道"!m"是0吗?为什么是0????请高手解答!!!!在下是刚刚学的,有挺多不明白的!!!!!

a=2*k!=!m;
从右向左计算。。
m逻辑值是1
!m=0
2*k!=0是判断
2*k=8
8!=0.成立。
所以是真的。真的值为1
所以a=1
a=a+a=1+1=2
这个不懂可以hi我。我具体给你讲

这样写就懂了。
赋值语句,先算右边表达式的值。
表达式里,算术运算比逻辑运算优先。
注意,非0为真, 非真为假,假为0,

void main()
{
int a=8,k=4,m=8;
printf("%d ", !m);
printf("%d ", 2*k);
printf("%d ", (2*k) != (!m));

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

printf("%d ",a);
}

逻辑运算判断的时候``零是假```非零是真```就是说``如果m的值是零的话``就是假``不是零就是真```而前面加个非“!”```就是刚好倒过来```!m的意思是如果m的值是零就是真 对应的返回值就是1, 如果不是零就是假``返回值就是0; 这题中m=8 (m!=0) !m返回值为0;

运算的过程就是你理解的那样```
算完!m 后就到了(2*k !=!m)这一步``这里也是逻辑判断```就是说那个式子成立不成立``成立就是真``不成立就是假```已经知道!m是零了 (2*k!=0)明显成立``就是真 ——C++那里输出和进行赋值时```真的值为1 假的值为0——

然后就到了赋值运算了```就是把(2*k!=!m)的返回值赋给a; 上一段中我们知道``式子成立``返回值为1 就是说```a=1;

最后``a=a+a;````不说了``留下悬念```》~_~《 ````