将浮点数视为变量。C++ Casting类型(SLODWORD和long)
*((long*)&variable)
和(long)variable
有什么区别?
是不是一回事?
为什么我的程序为每一个输出不同的结果?
将浮点数视为变量。C++ Casting类型(SLODWORD和long)
*((long*)&variable)
和(long)variable
有什么区别?
是不是一回事?
为什么我的程序为每一个输出不同的结果?
第一个是重新解释储存在&variable
如同它们代表一个长的位的,而第二执行转换variable
的值的(什么位‘实际上是’表示),以适当的值为long
。
前者与变量一起工作,好像它作为long
存储在内存中一样,即使它不是。后者将该变量转换为long
。
第一个是参考 - 第二个(临时)值(左值对右值) – 2015-02-06 19:48:56
“变量”的实际类型是什么? – PaulMcKenzie 2015-02-06 19:50:20
第一个版本将浮点值的4个字节解释为很长。如果你运气好的话,那么当* long *是一个64位类型时,产生一个非常不同的值,你只会使程序崩溃。第二个版本是浮点值的正确转换,只有当浮点值超出范围时才会产生一个非常不同的值。这些是C语言转换,查看您最喜爱的C++语言书籍,了解reinterpret_cast与static_cast之间的区别。 – 2015-02-06 20:24:32