サンプルコードM32とM64のコンパイラオプションは、異なる出力に
#include "stdio.h"
#include <stdint.h>
int main()
{
double d1 = 210.01;
uint32_t m = 1000;
uint32_t v1 = (uint32_t) (d1 * m);
printf("%d",v1);
return 0;
}
出力
1を提供
/test 174 # ./a.out
210009
2 。-m64オプションでコンパイルする場合(例:gcc -g3 -m64 test.c)
test 176 # ./a.out
210010
なぜ異なるのですかそれとも?
私が理解していたのは、m
は倍に昇格され、乗算はunit32_t
に下がります。また、標準型の整数を使用しているため、アーキテクチャなどに関連する曖昧さをさらに取り除くことになります。
ここでは何かが怪しいと知っていますが、それを固定することはできません。
更新:
gccとg ++の両方で上記の動作が確認できます(コメントの1つとして)。
にあなたがそのようにGCCを呼び出す場合は、 C++ではなくC言語のコードとしてコンパイルされています。無関係の言語にタグを追加しないでください。 – Olaf
@Olaf:Ok。私は質問を更新します。 gccとg ++コンパイラの両方で発生します。したがって、c/C++に固有のものではありません。ありがとう! –
1)これをC++の質問にしないでください! CとC++は**異なる**言語です。 1a)C++では、iostreamとC++のキャスト演算子を使用して異なるコードを使用する必要があります。 2)書式文字列に間違った型指定子を使用しています。 'inttypes.h'マクロを使って固定幅の整数を出力します。 – Olaf