日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++基础 (1) 常见的易错问题

發(fā)布時(shí)間:2024/4/14 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++基础 (1) 常见的易错问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1 #include<iostream> 2 using namespace std; 3 int main(void) 4 { 5 /* 6 *True為1,False為0 7 */ 8 int x=2,y,z; 9 x*=(y=z=5);cout<<x<<endl;//結(jié)果10 10 z=3; 11 x==(y=z);cout<<x<<endl;//結(jié)果10 12 x=(y&z);cout<<x<<endl;//按位與。結(jié)果3 13 x=(y&&z);cout<<x<<endl;//與運(yùn)算。結(jié)果1 14 y=4; 15 x=(y|z);cout<<x<<endl;//按位或。結(jié)果7 16 x=(y||z);cout<<x<<endl;//或運(yùn)算。結(jié)果1 17 return 0; 18 }

我的理解,第9行,先計(jì)算括號(hào)內(nèi)的,將5賦值給z,y,然后x=x*5.

第11行,是一個(gè)判斷語(yǔ)句==符號(hào)并不會(huì)改變操作數(shù)的值.當(dāng)為真,這個(gè)運(yùn)算符返回1,否則0或FALSE.此處x值不變.

第12行,&是按位與運(yùn)算.只有當(dāng)兩位都是1時(shí)才為真,即任意一邊位為0,則該位按位與后結(jié)果為0.如1010&1001他結(jié)果等于1000.

同理,按位或|操作符是當(dāng)兩位有一位為1時(shí),按位或的值就為1.如1010|1001結(jié)果為1011.

按位異或^操作符是僅當(dāng)有且只有一位為1時(shí)按位異或結(jié)果才為1.如1010^1001結(jié)果為0011.

~是按位求反,~1001結(jié)果是0110.

<<在非輸出流(cout)或重載情況下表示按位左移,右邊0補(bǔ)齊,>>向右移.如int a=5;

a<<2 //00000101變成了00010100

&&,||,!是邏輯運(yùn)算,或,與非,他們的結(jié)果只有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<<"未跳過(guò)c="<<c<<endl;}elsecout<<"跳過(guò) c="<<c<<endl; //跳過(guò) c=7 }

?

邏輯或運(yùn)算||是當(dāng)兩邊表達(dá)式有一個(gè)為真該運(yùn)算結(jié)果就為真,即當(dāng)||左邊表達(dá)式為真時(shí)不會(huì)計(jì)算右邊表達(dá)式.&&操作符,當(dāng)左邊表達(dá)式為假時(shí)就不計(jì)算右邊表達(dá)式,只有當(dāng)左邊為真時(shí)才會(huì)計(jì)算右邊表達(dá)式.

如下代碼:

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;//結(jié)果為3 11 cout<<TEMP<<endl;//結(jié)果為10 12 return 0; 13 }

第2行聲明并定義了全局變量TEMP,第8行聲明了局部變量TEMP.那么在main函數(shù)中,直接使用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;//結(jié)果是3 8 9 return 0; 10 }

如下代碼:

?

1 a = 4; cout << a++ << a;

?

這是CSDN C++板塊上置頂?shù)囊粋€(gè),拿到這所的原因是現(xiàn)在的國(guó)家計(jì)算機(jī)二級(jí)考試常考這種題,我在兩臺(tái)電腦上用不同編譯器得到的結(jié)果是不同的,所以記住一個(gè)規(guī)則:

  任何依賴(lài)于特定計(jì)算順序、依賴(lài)于在順序點(diǎn)之間實(shí)現(xiàn)修改效果的表達(dá)式,其結(jié)果都沒(méi)有保證。程序設(shè)計(jì)中應(yīng)該貫徹的規(guī)則是:如果在任何“完整表達(dá)式”(形成一段由順序點(diǎn)結(jié)束的計(jì)算)里存在對(duì)同一“變量”的多個(gè)引用,那么表達(dá)式里就不應(yīng)該出現(xiàn)對(duì)這一“變量”的副作用。否則就不能保證得到預(yù)期結(jié)果


如下代碼:

1 #include<iostream> 2 using namespace std; 3 int main(void) 4 { 5 /* 6 x=x+1,x+=1,x++;哪個(gè)效率最高,為什么? 7 x=x+1;效率最低,執(zhí)行過(guò)程如下 8 1.讀取右邊x地址 9 2.x+1 10 3.讀取左邊x地址 11 4.將右值傳給左邊 12 x+=1;其次,執(zhí)行過(guò)程如下 13 1.讀取右邊x地址 14 2.x+1 15 3.將值傳給x 16 x++效率最高,執(zhí)行過(guò)程如下 17 1.讀取右邊的x地址 18 2.x自增1 19 */ 20 return 0; 21 }

?

其實(shí)這個(gè)在匯編中很好解釋,x=x+1相比x++要多使用幾次寄存器,效率自然要低點(diǎn),不過(guò)這種寫(xiě)法也不是特實(shí)用,畢竟現(xiàn)代的計(jì)算機(jī)已經(jīng)非常快樂(lè),一些特殊項(xiàng)目不算.

轉(zhuǎn)載于:https://www.cnblogs.com/yTPety/archive/2013/03/03/CPP_basic.html

總結(jié)

以上是生活随笔為你收集整理的C++基础 (1) 常见的易错问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。