- 534 名前:デフォルトの名無しさん mailto:sage [2016/12/07(水) 22:13:13.11 ID:uezJiPW5.net]
- 質問です。
環境: VC++2015 x64 "符号なし64ビット整数"の変数に、最大値を設定してから "double" にキャストし、もとの型の"符号なし64ビット整数"に戻すと、値がざっくり半分となってしまいます。 この挙動は、CPUまたはコンパイラ的に、正しい挙動なのでしょうか? (符号付き整数では、最上位ビットが符号を表すのは理解してますが、以下のコードが通らないのは、直感に反するかと思います) #include <inttypes.h> int main(void) { uint64_t a = 0xFFFFFFFFFFFFFFFF; // a == 18446744073709551615 double b = (double)a; // b == 1.8446744073709552e+19 uint64_t c = (uint64_t)b; // c == 9223372036854775808 ??? ASSERT(a == b); // ok ASSERT(b == c); // failed ??? }
|

|