我想知道为什么图像中的以下两个打印件不相同?
uint16_t linCalc(uint16_t adcAverage){ float k = 2500 / 2500; float j = 8000 / 5000; int a = 1000 * (j - k); printf("a = %d\n", a); k = 1; j = 1.6; int b = 1000 * (j - k); printf("b = %d\n", b); }
b = 600 a = 0 b = 600 a = 0 b = 600 a = 0 b = 600 a = 0 b = 600 a = 0 b = 600 a = 0 b = 600 a = 0 b = 600
似乎浮点数在计算表达式之前被称为int(我还试图在它们的声明中对浮点数进行类型转换).
它们不相同,因为8000/5000
两个操作数都是int
常量,因此执行整数除法.分工的结果是1
.
要强制浮点除法,至少有一个操作数需要为a float
.这可以通过几种方式实现,即(并按优先顺序):
8000.0f / 5000
(float)8000 / 5000