c++语言中的"!"是什么意思

#include "iostream.h"
int main()
{
int a=8,b=4,c=2,k=4,m=8,n=6;
cout<<a<<b<<c<<k<<m<<n<<endl;
if (a!=b||m!=a+b)
{
a=a*k!=!m;
a=a+a;
}
if (a+b>=0&&m/3.0>2)
{
m=k+3*!c;
}
else
{
k=k*!m!=c;
}
cout<<a<<m<<k<<endl;
return 0;
}

初学 c++ 
程序中的 !m 是什么意思?
感叹号"!" 都有哪些作用呢?

小唯快跑啊
浏览 4540回答 2
2回答

qq_遁去的一_1

a = 2m = 4k = 4//在c++中所有的非0值都认为是true, 0被认为是false//所以 !m 当m不是0时,认为是!true, 返回false(0)好吧,首先我要说这段程序够变态的,如果你初学c++的话建议不要去深究这段代码了。如果有人在公司写出这种代码,会被直接fire,毫无疑问。说一下!在c++中的真正作用:1。 不等号!=a != b,表示判断a,b不相等,如果真的不相等返回1(true),否则返回0(false)2。 取非 !xx可以是一个变量,可以是返回一个布尔型或整型值的表达式(比如!(a==b))这时,如果 x 为0(false), !x为1(true)如果 x 为非0(true), !x为0 (false)以上两点是!在c++中的应用的所有作用,没有更多。至于那段程序,其实加入了很多运算符优先级的应用,而且可读性极差,是非常糟糕的编程风格,楼主不要学习他,下面依次解释一下都发生了什么:if (a!=b || m!=a+b) //判断a不等于b 或 m不等于a+b 显然为truea=a*k!=!m; //这句先执行 a*k != !m, 其中m不为0,所以!m 为 0// a * k 不为0, 所以a*k != !m 返回true(1)// a = 1a= a+a; // a = 2if (a+b>=0 && m/3.0 > 2 ) //先执行a+b>=0 返回true; 然后m/3.0 >2 返回true; true && true 为 true, 进入if{m = k + 3*!c; //先执行!c, 为0; 3*0 为0 ; k+0 为4 ;m =4}else //不进入//程序输出。==============================================另外,楼主的程序是编译不过的,更改如下:#include <iostream>using namespace std;int main(){int a=8,b=4,c=2,k=4,m=8,n=6;cout<<"a:"<<a<<"\tb:"<<b<<"\tc:"<<c<<"\tk:"<<k<<"\tm:"<<m<<"\tn:"<<n<<endl;a=a*k!=!m;if (a!=b||m!=a+b){a=a*k!=!m;a=a+a;}if (a+b>=0&&m/3.0>2){m=k+3*!c;cout<<m<<endl;}else{k=k*!m!=c;}cout<<"a:"<<a<<endl<<"m:"<<m<<endl<<"k:"<<k<<endl;char lll;cin >> lll;return 0;}
打开App,查看更多内容
随时随地看视频慕课网APP