Microchip C Compiler (Gnu C Compiler に基づく) を使用して、2 つの整数値を処理し、整数値を返す必要があります。整数は 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 で除算されるため、結果は再び 16 ビット未満になります。
IMO、私のコードはかなり醜いです。より良い方法がわからないからです。明示的なキャストを行わずに、コンパイラが計算中に 32 ビット長整数を使用するようにするにはどうすればよいですか?