2015-02-06 438 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