C++中的運(yùn)算符和表達(dá)式
在編程語言中“表達(dá)式”可以近似于“公式”,也就是按照自己的預(yù)期進(jìn)行某種計(jì)算,表達(dá)式由運(yùn)算符合操作數(shù)等構(gòu)成。C++中包含單目(一元)運(yùn)算符、雙目(二元)運(yùn)算符和三目(三元)運(yùn)算符,相應(yīng)的構(gòu)成了多種表達(dá)式。運(yùn)算符具有優(yōu)先級(jí)和結(jié)合性,優(yōu)先級(jí)指先后計(jì)算次序,結(jié)合性指同級(jí)運(yùn)算符時(shí)按照自左向右還是自右向左進(jìn)行計(jì)算。
(1)算術(shù)表達(dá)式
算術(shù)表達(dá)式由算術(shù)運(yùn)算符、操作數(shù)和括號(hào)構(gòu)成,基本運(yùn)算符包含:加+、減-、乘*、除\、取余%,只有“加、減”在做“正、負(fù)”符號(hào)時(shí)是一元運(yùn)算符,其余情況都是二元運(yùn)算符。C++擁有自加++和自減--兩個(gè)一元運(yùn)算符(python應(yīng)該沒有自加和自減,因?yàn)閜ython中數(shù)值是不可變類型,改變值會(huì)申請新的內(nèi)存),當(dāng)表達(dá)式中存在自加或者自減運(yùn)算時(shí),一定要注意自加和自減是在操作數(shù)之前還是操作數(shù)之后,在操作數(shù)之前表示先自加再計(jì)算整個(gè)表達(dá)式,在操作數(shù)之后表示先計(jì)算整個(gè)表達(dá)式再自加,
比如下面的代碼:
int age_1 = 22; int age_2 = 22; int new_age_1; int new_age_2; new_age_1 = age_1++; new_age_2 = ++age_2;
第5行計(jì)算new_age_1
時(shí),先計(jì)算完整個(gè)表達(dá)式,再進(jìn)行age_1的自加,所以new_age_1
等于22;第6行計(jì)算new_age_2時(shí),先對age_2進(jìn)行自加,再進(jìn)行表達(dá)式計(jì)算,所以new_age_2等于23。自己在寫代碼時(shí)最好不要給自己挖坑,少使用過于復(fù)雜的表達(dá)式。
(2)賦值運(yùn)算符
賦值運(yùn)算符“=”是雙目運(yùn)算符,結(jié)合性是自右向左,允許連續(xù)賦值:
int x, y, z; x = y = z = 1;
此外,C++還有+=、*=、/=等等運(yùn)算符,結(jié)合性都是自右向左。
(3)逗號(hào)運(yùn)算符
逗號(hào)運(yùn)算符可以分隔兩個(gè)表達(dá)式,先計(jì)算左邊表達(dá)式再計(jì)算右邊的表達(dá)式,但是由于逗號(hào)運(yùn)算符的優(yōu)先級(jí)低于賦值運(yùn)算符,所以采用逗號(hào)運(yùn)算符進(jìn)行賦值時(shí)必須把逗號(hào)表達(dá)式括起來,
下面兩行代碼得到的x值是不同的:
x = (2, 3); x = 2, 3;
第一行x等于3,第二行x等于2,因?yàn)槎禾?hào)運(yùn)算符的優(yōu)先級(jí)低于賦值運(yùn)算符,自己在使用中必須小心。
(4)關(guān)系運(yùn)算符
關(guān)系運(yùn)算符是邏輯表達(dá)式的基礎(chǔ),C++包含的關(guān)系運(yùn)算符分兩個(gè)優(yōu)先級(jí),較高的優(yōu)先級(jí)為:大于、小于、大于等于和小于等于四種,分別用<、<=、>、>=來表示;較低的優(yōu)先級(jí)為:等于、不等于,分別用==、!=表示。邏輯表達(dá)式返回的值為布爾類型,判斷為真返回True(0),判斷為假返回False(1),
如下:
int x = 2; int y = 3; bool result; result = (x >= y);
C++還擁有三個(gè)邏輯運(yùn)算符:與、或、非,分別用||、&&、!三個(gè)符號(hào)表示。
(5)三元表達(dá)式
據(jù)自己目前所知,C++唯一的三元運(yùn)算符是條件運(yùn)算符,其語法如下:
條件判斷? 表達(dá)式1:表達(dá)式2
當(dāng)判斷條件成立時(shí),執(zhí)行表達(dá)式1;當(dāng)判斷條件不成立時(shí),執(zhí)行表達(dá)式2,
代碼如下:
int x = 2; int y = 3; int result; result = (x>y? 10: 1000);
由于x>y不成立,所以執(zhí)行表達(dá)式2,也就是result被賦值為1000。
(6)sizeof函數(shù)
書中稱sizeof為單獨(dú)的運(yùn)算符,為了便于理解這里把其視為函數(shù)。sizeof可以求取對象的占用的字節(jié)數(shù),下面的例子計(jì)算了int類型占用的字節(jié)數(shù):
int result=1000; cout << sizeof(result) <<endl;
輸出為4,表示int占用4個(gè)字節(jié),這和理論上是一致的。
(7)數(shù)據(jù)類型轉(zhuǎn)換
數(shù)據(jù)類型轉(zhuǎn)換是編程語言面臨的共同問題,對于表達(dá)式中存在多種數(shù)據(jù)類型的情況必須采用有效的處理策略。C++數(shù)據(jù)類型轉(zhuǎn)換包含顯式轉(zhuǎn)換和隱式轉(zhuǎn)換兩種,下面分別進(jìn)行介紹。
(7.1)顯式轉(zhuǎn)換
如果自己清晰的知道表達(dá)式中各個(gè)對象是什么類型,并且清晰的知道想要將對象變?yōu)楹畏N新的類型,那么可以使用:類型說明符(表達(dá)式)進(jìn)行顯式的類型轉(zhuǎn)換,
比如將float類型的x轉(zhuǎn)換為int類型的y:
float x = 6.66; int y = int(x); ??
上述代碼運(yùn)行后y的值為6,僅僅取x的整數(shù)部分。顯式類型轉(zhuǎn)換時(shí),如果自己選擇的類型說明符的精度較低,比如上述代碼中x為高精度,但是類型說明符int為低精度,則數(shù)據(jù)類型轉(zhuǎn)換過程中造成了精度丟失。
(7.2)隱式轉(zhuǎn)換
如果表達(dá)式中有高精度和低精度兩種數(shù)據(jù)參與計(jì)算,會(huì)自動(dòng)將低精度數(shù)據(jù)轉(zhuǎn)換為高精度數(shù)據(jù)進(jìn)行計(jì)算,這種隱式轉(zhuǎn)換是沒有精度丟失的安全轉(zhuǎn)換:
float x = 6.66; int y = 2; cout << x+y <<endl;
上述代碼中浮點(diǎn)x和整型y進(jìn)行加法時(shí),按照浮點(diǎn)類型進(jìn)行計(jì)算輸出6.66。
另外,邏輯表達(dá)式中0和非0數(shù)據(jù)分別會(huì)被轉(zhuǎn)換為true和false,賦值表達(dá)式自動(dòng)將等號(hào)右邊的類型轉(zhuǎn)換為等號(hào)左邊的類型。
(8)總結(jié)
C++的包含的運(yùn)算符和表達(dá)式總體來說和python差不多,類型轉(zhuǎn)換的規(guī)則也很符合直觀的理解。位運(yùn)算符部分暫時(shí)沒進(jìn)行記錄是因?yàn)槠洳⒉怀S?,等用到的時(shí)候再學(xué)習(xí)。
參考:
- 鄭莉《C++語言程序設(shè)計(jì)》
到此這篇關(guān)于C++中的運(yùn)算符和表達(dá)式的文章就介紹到這了,更多相關(guān)C++運(yùn)算符和表達(dá)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言全方位講解指針與地址和數(shù)組函數(shù)堆空間的關(guān)系
指針是C語言中一個(gè)非常重要的概念,也是C語言的特色之一。使用指針可以對復(fù)雜數(shù)據(jù)進(jìn)行處理,能對計(jì)算機(jī)的內(nèi)存分配進(jìn)行控制,在函數(shù)調(diào)用中使用指針還可以返回多個(gè)值2022-04-04C++11中l(wèi)ambda、std::function和std:bind詳解
大家都知道C++11中增加了許多的新特性,下面在這篇文中我們就來聊一下lambda表達(dá)式,閉包,std::function以及std::bind。文中介紹的很詳細(xì),相信對大家具有一定的參考價(jià)值,有需要的朋友們下面來一起看看吧。2017-01-01OLEDB打開Excel文件的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狾LEDB打開Excel文件的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01C++實(shí)現(xiàn)動(dòng)態(tài)煙花效果
這篇文章主要介紹了利用C++實(shí)現(xiàn)的放煙花程序,用到了EGE圖形庫,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C++有一定幫助,需要的可以參考一下2022-01-01