2015-02-06 439 views
0

将浮点数视为变量。C++ Casting类型(SLODWORD和long)

*((long*)&variable)(long)variable有什么区别?

是不是一回事?

为什么我的程序为每一个输出不同的结果?

+1

第一个是参考 - 第二个(临时)值(左值对右值) – 2015-02-06 19:48:56

+0

“变量”的实际类型是什么? – PaulMcKenzie 2015-02-06 19:50:20

+1

第一个版本将浮点值的4个字节解释为很长。如果你运气好的话,那么当* long *是一个64位类型时,产生一个非常不同的值,你只会使程序崩溃。第二个版本是浮点值的正确转换,只有当浮点值超出范围时才会产生一个非常不同的值。这些是C语言转换,查看您最喜爱的C++语言书籍,了解reinterpret_cast与static_cast之间的区别。 – 2015-02-06 20:24:32

回答

0

第一个是重新解释储存在&variable如同它们代表一个长的位的,而第二执行转换variable的值的(什么位‘实际上是’表示),以适当的值为long

0

前者与变量一起工作,好像它作为long存储在内存中一样,即使它不是。后者将该变量转换为long