画像に次の2つのプリントが同じでないのはなぜですか?C型キャスティングの問題(FloatがIntにアサート)
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型としてアサートされているようです。
権利でありますあなたが持っているように、あなたのフロートは 'int'に劣化します。 –
あなたの質問にコードで画像を貼り付けないでください。実際のコードを貼り付けます。 – DyZ
'2500'、 '8000'、および '5000'はすべて整数リテラルなので、除算には整数の演算が使用され、その後は 'k'および' j'への代入のためにfloatに変換されます。しかし、 'b'の場合、浮動小数点値の減算によって、浮動小数点での乗算も行われ、後で' b'への代入のために 'int'に変換されます。だから、別の結果。 – Dmitri