發(fā)現(xiàn)<<的優(yōu)先級好低呀...還是我太無知了...
#include
#define GET_BIT(a, b, c) a << b - c
int main()
{
int a = 1;
int b = 5;
int c = 4;
printf("%d\n", GET_BIT(a, b, c) + 1);
}
result: 4
C的優(yōu)先級口訣
括號成員第一; //括號運算符[]() 成員運算符. ->
全體單目第二; //所有的單目運算符比如++、 --、 +(正)、 -(負(fù)) 、指針運算*、&
乘除余三,加減四; //這個"余"是指取余運算即%
移位五,關(guān)系六; //移位運算符:<< >> ,關(guān)系:> < >= <= 等
等于(與)不等排第七; //即== 和!=
位與異或和位或; //考試.大提示這幾個都是位運算: 位與(&)異或(^)位或(|)
"三分天下"八九十;
邏輯或跟與; //邏輯運算符:|| 和 &&
十二和十一; //注意順序:優(yōu)先級(||) 底于 優(yōu)先級(&&)
條件高于賦值, //三目運算符優(yōu)先級排到13 位只比賦值運算符和","高
逗號運算級最低! //逗號運算符優(yōu)先級最低。
#include
#define GET_BIT(a, b, c) a << b - c
int main()
{
int a = 1;
int b = 5;
int c = 4;
printf("%d\n", GET_BIT(a, b, c) + 1);
}
result: 4
C的優(yōu)先級口訣
括號成員第一; //括號運算符[]() 成員運算符. ->
全體單目第二; //所有的單目運算符比如++、 --、 +(正)、 -(負(fù)) 、指針運算*、&
乘除余三,加減四; //這個"余"是指取余運算即%
移位五,關(guān)系六; //移位運算符:<< >> ,關(guān)系:> < >= <= 等
等于(與)不等排第七; //即== 和!=
位與異或和位或; //考試.大提示這幾個都是位運算: 位與(&)異或(^)位或(|)
"三分天下"八九十;
邏輯或跟與; //邏輯運算符:|| 和 &&
十二和十一; //注意順序:優(yōu)先級(||) 底于 優(yōu)先級(&&)
條件高于賦值, //三目運算符優(yōu)先級排到13 位只比賦值運算符和","高
逗號運算級最低! //逗號運算符優(yōu)先級最低。