第四章運算子及其優先順序

2021-09-25 03:02:56 字數 1280 閱讀 4102

表示式具有乙個值

語句沒有值

左值=右值,賦值操作符的左運算元必須是非const的左值

賦值操作具有右結合性,當有多個賦值操作時,從右向左結合

++i是字首運算,先變後用,取i,變化內容,放入暫存器

i++是字尾運算

vc++6.0, dev-c++, gcc4.5.1環境下,彙編級只能實現兩個數相加

d=(++i)+(++i)+(++i)會被拆分成d=(++i)+(++i),d=d+(++i)所以答案是22

在vs2010下可以直接進行三次自加,然後在加總和,答案是24

c/c++編譯器編譯時,從左到右盡可能多將字元組成乙個運算子或者識別符號

++i+++j等效於++(i++)+j "++"作用於i++,不合法

%要求運算數必須是整形

前置自增可以做左值表示式,返回的是運算元本身。後置自增只能用於右值表示式,返回的是乙個臨時變數

+,-,++,–的運算級別相同,int a=-i++,運算方向是從右到左結合,所以等價於-(i++),但是後置自增是先用再加,所以是等價於int a=-i,i=i+1;

關係與邏輯運算子

if(i判定乙個整數n是否為2的正整數次冪?不是2的整倍數

if(n>1&&((n&(n-1))==0))

cout<<"yes"n-1=01111 按位與結果就為0

如果n=11000

n-1=10111按位與結果為10000

異或運算性質:相同數異或得0,且滿**換律

1,可以用於求解:1到n某乙個數缺失了,求這n-1個數中缺失的是哪乙個數

2,不用第三方變數,交換兩個變數的值

a=a^b

b=a^b

a=a^b

3,實現加法運算

int add_no_arithm(int a,int b)

4,實現求平均數

(x&y)+((x^y)>>1)

第乙個是取,x有1,y有1,該位置取1剛好是兩者的一半

第二個是,x,y兩者之中只有乙個有1的地方,取1後除2,即右移一位。

移位運算子

<< >>

int 低位補0 高位補符號位

unsigned int 低位補0 高位補0

運算子優先順序

1,括號,下標,->, . 的優先順序最好

2,單目比雙目高,算術雙目比其他雙目高

3,移位運算高於關係運算,關係運算高於按位運算,按位運算高於邏輯運算,邏輯運算高於三目運算

4,所有賦值運算優先順序相同,從右向左集合

第四章 運算子過載

目錄定義 重新定義運算子的運算 實質是函式過載,把含有運算子的表示式轉換成對運算子函式的呼叫 可以過載為普通函式 成員函式 友元函式 多次過載時,根據實參型別決定呼叫哪個運算子函式 等號只能過載為成員函式 賦值語句和初始化語句的等號 含義不同,初始化語句需要用建構函式實現 同類賦值注意點 可能包含指...

第四章 運算子的本質

陣列是存在於人們頭腦中的乙個邏輯概念,而編譯器其實並不知道有陣列這個東西,它所知道的,只是運算子,當遇到運算子的時候,編譯器只是簡單地把它轉換為類似 a i j 這樣的等價表示式,之所以是這種表示式,如前幾章所述,是因為c語言的陣列實現本質上是陣列的巢狀。由於這種等價關係的存在,會產生一些古零精怪的...

第四章 運算子的本質

陣列是存在於人們頭腦中的乙個邏輯概念,而編譯器其實並不知道有陣列這個東西,它所知道的,只是運算子,當遇到運算子的時候,編譯器只是簡單地把它轉換為類似 a i j 這樣的等價表示式,之所以是這種表示式,如前幾章所述,是因為c語言的陣列實現本質上是陣列的巢狀。由於這種等價關係的存在,會產生一些古零精怪的...