我对我不了解的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。
对此有任何解释吗?
答案 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)