使用 Microchip C 编译器(基于 Gnu C 编译器),我需要处理两个整数值并返回一个整数值。整数是 16 位宽,长整数是 32 位。
在计算过程中,会超出 16bit 的范围。这是我到目前为止所做的:
unsigned int calcVoltage(unsigned int adcValue){
long voltage = ((long)adcValue * (long)VOLTAGE) / (long)ADCRANGE;
return voltage; //12-bit ADC-Value, 3000mv max
}
VOLTAGE 是一个常数,此时赋值为 3000。将 adcValue(0 到 12bit)乘以 3000 将超过 16bit。最后将乘法的结果除以 4095,结果又回到 16bit 以下。
IMO,我的代码很丑,因为我不知道如何做得更好。如何确保编译器在计算过程中使用 32 位长整数,而无需进行所有显式转换?