C:宏无法正确转换为int

时间:2019-03-28 13:07:41

标签: c types operator-priority

我对我不了解的C行为有疑问...

#define KB 1024
#define FOUR_KB 4*KB

int main() {
  uint32_t a;
  uint32_t b = 24576;

  a = ceil((float)b/FOUR_KB);
  //want to get number of 4K transfers 
  //(and possibly last transfer that is less than than 4K)
}

在这一点上,我希望a为6,但得到的结果为96。

对此有任何解释吗?

1 个答案:

答案 0 :(得分:4)

乘法和除法具有相同的优先级,但是当压入堆栈时,编译器从左至右进行计算:

24576÷(4×1024) = 6         // what you expect
24576÷4×1024 = 6291456     // what compiler compute, this mean : 6144 * 1024

您应该这样使用括号和#define

#define FOUR_KB (4*KB)