發現<<的優先級好低呀...還是我太無知了...
#include <stdio.h>
#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的優先級口訣
括號成員第一; //括號運算符[]() 成員運算符. ->
全體單目第二; //所有的單目運算符比如++、 --、 +(正)、 -(負) 、指針運算*、&
乘除余三,加減四; //這個"余"是指取余運算即%
移位五,關系六; //移位運算符:<< >> ,關系:> < >= <= 等
等於(與)不等排第七; //即== 和!=
位與異或和位或; //這幾個都是位運算: 位與(&)異或(^)位或(|)
"三分天下"八九十;
邏輯或跟與; //邏輯運算符:|| 和 &&
十二和十一; //注意順序:優先級(||) 底於 優先級(&&)
條件高於賦值, //三目運算符優先級排到13 位只比賦值運算符和","高
逗號運算級最低! //逗號運算符優先級最低