#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 型別右結合 邏輯操作符 左 算術運算子 左 算術運...