2 回答

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
a = 2
m = 4
k = 4
//在c++中所有的非0值都認(rèn)為是true, 0被認(rèn)為是false
//所以 !m 當(dāng)m不是0時(shí),認(rèn)為是!true, 返回false(0)
好吧,首先我要說這段程序夠變態(tài)的,如果你初學(xué)c++的話建議不要去深究這段代碼了。如果有人在公司寫出這種代碼,會(huì)被直接fire,毫無疑問。
說一下!在c++中的真正作用:
1。 不等號(hào)!=
a != b,表示判斷a,b不相等,如果真的不相等返回1(true),否則返回0(false)
2。 取非 !x
x可以是一個(gè)變量,可以是返回一個(gè)布爾型或整型值的表達(dá)式(比如!(a==b))
這時(shí),如果 x 為0(false), !x為1(true)
如果 x 為非0(true), !x為0 (false)
以上兩點(diǎn)是!在c++中的應(yīng)用的所有作用,沒有更多。
至于那段程序,其實(shí)加入了很多運(yùn)算符優(yōu)先級(jí)的應(yīng)用,而且可讀性極差,是非常糟糕的編程風(fēng)格,樓主不要學(xué)習(xí)他,下面依次解釋一下都發(fā)生了什么:
if (a!=b || m!=a+b) //判斷a不等于b 或 m不等于a+b 顯然為true
a=a*k!=!m; //這句先執(zhí)行 a*k != !m, 其中m不為0,所以!m 為 0
// a * k 不為0, 所以a*k != !m 返回true(1)
// a = 1
a= a+a; // a = 2
if (a+b>=0 && m/3.0 > 2 ) //先執(zhí)行a+b>=0 返回true; 然后m/3.0 >2 返回true; true && true 為 true, 進(jìn)入if
{
m = k + 3*!c; //先執(zhí)行!c, 為0; 3*0 為0 ; k+0 為4 ;m =4
}
else //不進(jìn)入
//程序輸出。
==============================================
另外,樓主的程序是編譯不過的,更改如下:
#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;
}
- 2 回答
- 0 關(guān)注
- 4654 瀏覽
添加回答
舉報(bào)