为什么在浮点变量中存储整数除法后,在C中会出现错误的结果?

为什么在浮点变量中存储整数除法后,在C中会出现错误的结果?,c,gcc,C,Gcc,我正在使用STM32和GCC编译器,我进行以下划分: uint8_t w, h; w=2; h=5; float test = (w * h) / 8; 结果是test=1 为什么我错了?我无法理解这种行为 有人能给我解释一下原因吗?如果要得到正确的结果,您需要进行以下修改: uint8_t w, h; w = 2; h = 5; float test = (float)(w * h) / 8; 如果除以整数,则得到一个整数。(w*h)/8是一个带有整数结果的整数表达式 对float的赋值是

我正在使用STM32和GCC编译器,我进行以下划分:

uint8_t w, h;
w=2;
h=5;
float test = (w * h) / 8;
结果是
test=1

为什么我错了?我无法理解这种行为


有人能给我解释一下原因吗?

如果要得到正确的结果,您需要进行以下修改:

uint8_t w, h;
w = 2;
h = 5;
float test = (float)(w * h) / 8;
如果除以整数,则得到一个整数。

(w*h)/8
是一个带有整数结果的整数表达式

float
的赋值是隐式强制转换,但不会恢复丢失的小数部分

通过确保至少有一个操作数是浮点,可以将除法设置为浮点表达式:

float test = (w * h) / 8.0f ;