將浮點數視爲變量。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