GCC 4.8.0が32ビットで/でコンパイルされています。キャスト動作が一致しない可能性があります
私は例との動作が混乱することを見つける:
int16_t s16 = 0;
double dbl = 0.0;
s16 = (int16_t)((double)32767.0); // 1: s16 = 32767
s16 = (int16_t)((double)32768.0); // 2: s16 = 32767
s16 = (int16_t)((double)-32768.0); // 3: s16 = -32768
s16 = (int16_t)((double)-32769.0); // 4: s16 = -32768
dbl = 32767.0;
s16 = (int16_t)dbl; // 5: s16 = 32767
dbl = 32768.0;
s16 = (int16_t)dbl; // 6: s16 = -32768
dbl = -32768.0;
s16 = (int16_t)dbl; // 7: s16 = -32768
dbl = -32769.0;
s16 = (int16_t)dbl; // 8: s16 = -32768
私はそれが定義された実装の実現が、一貫性はまだいいだろう。誰でも何が起こっているのか説明できますか?
'32767.0'、' 32768.0'、 '-32768.0'を' double'にキャストする必要はなく、すでに 'double'型です。 – ouah
@ouahはい、私は知っています。私はその行動を強調するためにそうしました。 – Ioan