面試題 運算子優先順序

2021-08-14 04:10:48 字數 1493 閱讀 2364

#include 

using

namespace

std;

int main()

首先是運算子優先順序:=、~、>>和+優先順序順序是怎樣的

運算子優先順序和口訣:

一共有十五個優先順序:

1 () . ->

2 ! ~ -(負號) ++ – &(取變數位址)* (type)(強制型別) sizeof

3 * / %

4 + -

5 >> <<

6 > >= < <=

7 == !=

8 &9 ^

10 |

11 &&

12 ||

13 ?:

14 = += -= *= /= %= |= ^= &= >>= <<=

15 ,

結合性:2 13 14 是從右至左 其他都是 從左至右

口訣:

括號成員第 一; //括號運算子 成員運算子. ->

全體單目第 二` //所有的單目運算子比如++、 –、 +(正)、 -(負) 、指標運算*、&

乘除餘 三,加減 四; //這個」餘」是指取餘運算即%

移位 五,關係 六; //移位運算子:<< >> ,關係:> < >= <= 等

等於(與)不等排第 七; //即== 和!=

位與異或和位或; //這幾個都是位運算: 位與(&)異或(^)位或(|)

「三分天下」**十;

邏輯或跟與; //邏輯運算子:|| 和 &&

十二和 十一; //注意順序:優先順序(||) 底於 優先順序(&&)

條件高於賦值, //三目運算子優先順序排到 [十三] 位只比賦值 [十四]運算子和」,」[ 十五]高

逗號運算級最低! //逗號運算子優先順序最低

所以優先順序順序是:~、+大於》大於=,先做a的取反操作,然後4+1為5,然後~a>>5,然後賦值給b

下面,如果按照我們的常識,a取反右移5位應該是2才對,但是答案是250,對250分析可知,當~a右移時,前面補的是1,而不是0,為什麼呢?

因為,無論是unsigned char,還是unsigned short、short、char等,都是轉換成int來處理的,一般情況下,int為32位,所以a取反後是ffffff5a,右移5位,前面補1(最高位為1,在計算機中認為是負數,補1,如果是unsigned int型的變數的話,前面補0),最後轉化成unsigned char型,所以取後8位是fa,即250

可以用以下程式測試:

#include 

using

namespace

std;

int main()

#include 

using

namespace

std;

int main()

兩者輸出的b截然不同,第乙個輸出為fffffffa,第二個為07fffffa

運算子優先順序 C 運算子優先順序

c 運算子優先順序 優先順序運算子 描述方向1 scope resolution 範圍解析 left to right 2 suffix postfix increment and decrement 字首 字尾遞增和遞減 function call 函式呼叫 array subscripting ...

運算子優先順序 Python 運算子優先順序

python 運算子優先順序 運算子描述 lambda lambda表示式 or布林 或 and布林 與 not x 布林 非 in,not in 成員測試 is,is not 同一性測試 比較 按位或 按位異或 按位與 移位 加法與減法 乘法 除法與取餘 x,x 正負號 x 按位翻轉 指數 x.a...

運算子優先順序 PHP運算子優先順序

php運算子優先順序 結合方向 運算子附加資訊 非結合clone new clone 和 new左 array 非結合 遞增 遞減運算子 非結合 int float string array object bool 型別非結合 instanceof 型別右結合 邏輯操作符 左 算術運算子 左 算術運...