2 回答
TA貢獻1725條經驗 獲得超8個贊
a = 2
m = 4
k = 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。 取非 !x
x可以是一個變量,可以是返回一個布爾型或整型值的表達式(比如!(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 顯然為true
a=a*k!=!m; //這句先執行 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 ) //先執行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;
}
- 2 回答
- 0 關注
- 4897 瀏覽
添加回答
舉報
