0

以下のコード フラグメントを検討してください。

double * p = new double[16];

int value = 1;
void * q = p;
*((double *)q) = value;

int x = ((long *)p)[0];

cout << "Value of x for double * to long * = " << x << endl;

*((int *)q) = value  ;

x = ((long *)p)[0];

cout << "Value of x for int * to long * = " << x << endl;

ここで、出力はそれぞれ 0 と 1 です。誰かが私に理由を説明できますか?

また、ポインタの値に直接アクセスすると...つまり。p[0]、どちらの場合も値は 1 として正しく表示されます。なんで?

4

1 に答える 1

1

整数はストレート バイナリでメモリに格納されるため、 と の間intlong問題なく変換できます。doulbe一部のビットは仮数の記述に使用され、残りのビットは指数の記述に使用される浮動小数点バイナリ構文を使用して格納されます (科学的表記法、つまり 5e2 = 500 に似ています)。

double のデータを double のデータとして使用しようとすると、バイナリが値を格納する方法が異なるため、正しく変換されません。

于 2012-05-09T06:08:59.427 に答える