C++基础 (1) 常见的易错问题
我的理解,第9行,先計算括號內的,將5賦值給z,y,然后x=x*5.
第11行,是一個判斷語句==符號并不會改變操作數的值.當為真,這個運算符返回1,否則0或FALSE.此處x值不變.
第12行,&是按位與運算.只有當兩位都是1時才為真,即任意一邊位為0,則該位按位與后結果為0.如1010&1001他結果等于1000.
同理,按位或|操作符是當兩位有一位為1時,按位或的值就為1.如1010|1001結果為1011.
按位異或^操作符是僅當有且只有一位為1時按位異或結果才為1.如1010^1001結果為0011.
~是按位求反,~1001結果是0110.
<<在非輸出流(cout)或重載情況下表示按位左移,右邊0補齊,>>向右移.如int a=5;
a<<2 //00000101變成了00010100
&&,||,!是邏輯運算,或,與非,他們的結果只有TRUE或FALSE.
#include <iostream> using namespace std; void main() {int a=4,b=6,c=7;if(a==4||b++){cout<<"a="<<a<<" b="<<b<<endl;//a=4 b=6 }if(a==4&&b++){cout<<"a="<<a<<" b="<<b<<endl;//a=4 b=7 }if(a==b&&c++){cout<<"未跳過c="<<c<<endl;}elsecout<<"跳過 c="<<c<<endl; //跳過 c=7 }?
邏輯或運算||是當兩邊表達式有一個為真該運算結果就為真,即當||左邊表達式為真時不會計算右邊表達式.&&操作符,當左邊表達式為假時就不計算右邊表達式,只有當左邊為真時才會計算右邊表達式.
如下代碼:
1 using namespace std; 2 int TEMP=3; 3 int main(void) 4 { 5 /* 6 *C++全局變量與局部變量 7 */ 8 int TEMP=10; 9 ::TEMP++; 10 cout<<::TEMP<<endl;//結果為3 11 cout<<TEMP<<endl;//結果為10 12 return 0; 13 }第2行聲明并定義了全局變量TEMP,第8行聲明了局部變量TEMP.那么在main函數中,直接使用TEMP指的是局部變量,即TEMP=10,使用全局變量可加全局作用域::
如下代碼:
1 #include<iostream> 2 using namespace std; 3 int main(void) 4 { 5 int i=1,j=2; 6 int k=i+++j; 7 cout<<k<<endl;//結果是3 8 9 return 0; 10 }如下代碼:
?
1 a = 4; cout << a++ << a;?
這是CSDN C++板塊上置頂的一個,拿到這所的原因是現在的國家計算機二級考試常考這種題,我在兩臺電腦上用不同編譯器得到的結果是不同的,所以記住一個規則:
任何依賴于特定計算順序、依賴于在順序點之間實現修改效果的表達式,其結果都沒有保證。程序設計中應該貫徹的規則是:如果在任何“完整表達式”(形成一段由順序點結束的計算)里存在對同一“變量”的多個引用,那么表達式里就不應該出現對這一“變量”的副作用。否則就不能保證得到預期結果
如下代碼:
?
其實這個在匯編中很好解釋,x=x+1相比x++要多使用幾次寄存器,效率自然要低點,不過這種寫法也不是特實用,畢竟現代的計算機已經非常快樂,一些特殊項目不算.
轉載于:https://www.cnblogs.com/yTPety/archive/2013/03/03/CPP_basic.html
總結
以上是生活随笔為你收集整理的C++基础 (1) 常见的易错问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LA 4328 Priest John'
- 下一篇: s3c2440移植MQTT