0

float が int にキャストされるとき、このキャストがコンパイラによってどのように実装されるか。コンパイラは float 変数のメモリの一部をマスクしますか。つまり、残りのメモリを int 変数に渡すために、メモリのどの部分がコンパイラによって取り除かれますか。

これに対する答えは、int と float がメモリ内でどのように維持されるかにあると思います。

しかし、コンパイラ依存ではなくマシン依存ではありませんか。下位の型にキャストされたときに、コンパイラがメモリのどの部分をコピーするかを決定する方法 (これは静的キャストです)。

私は間違った情報に混乱していると思います。

(tag=downcasting に関するいくつかの質問を読みました。そこでは、それがキャストなのか変換なのかについての議論が行われていました。どちらもコンパイラーによって実行されるため、それが何と呼ばれているのかにはあまり興味がありませんが、これがどのように行われているかについては実行されます)。

... ありがとう

4

2 に答える 2

0

ほとんどの CPU アーキテクチャは、float<->int 変換を行うためのネイティブ命令 (または複数命令シーケンス) を提供します。コンパイラは通常、この命令を生成するだけです。多くの場合、より高速な方法があります。この質問にはいくつかの良い情報があります: x86 で float を int に変換する最速の方法は何ですか?

于 2010-07-09T19:57:26.250 に答える
0

ポインターではなく基本型について話す場合、変換が行われます。浮動小数点と整数の表現は非常に異なるため (通常はそれぞれ IEEE-754 と 2 の補数)、一部のビットをマスクするだけではありません。

変換を行わずに浮動小数点数を int として表示したい場合は、(C で) 次のようにすることができます。

float f = 10.5;
int i2 = (int*)&f;
printf("%f %d\n", f, i2);
于 2010-07-09T19:32:58.137 に答える