中float與DWORD的互換

2021-09-01 20:00:49 字數 734 閱讀 9428

引子:在看《龍書》的時候有個float到dword的轉換函式不理解。

dword d3d::ftodw(float f)

背景: 有些函式需要傳入dword型別的變數,但是該變數的實際意義是用小數來表示的。這裡就需要在不改變float本身值的情況下傳入乙個dword變數。

一段網上的**

dword dw = 0;

float f1 = 0.25;

cout<<"f1 = "

cout<<"dw = *((dword*)&f1): "

cout<<"f1 = 0.0: "

cout<<"f1 = *((float*)&dw): "<

執行結果是

f1 = 0.25

dw = *((dword*)&f1): 1048576000

f1 = 0.0: 0

f1 = *((float*)&dw): 0.25

這裡利用的是編譯器轉型的手段,對於任何位元組對等的型別都適用,比如float到int,double到long等等。這樣的轉換可以保證二進位制資料不丟失,從而保證資料的完整性。

C 中 DWORD和int的區別

int 代表int,dword 代表 unsigned long int會隨著機器位數的不同而發生變化,比如在16位機上為16為,在32位機上為32位,在64位機上為64位。看看最原始的定義就知道了。dword是無符號的,相當於unsigned long 它是mfc的資料型別。而int是有符號性的,...

C 中 DWORD和int的區別

int 代表int,dword 代表 unsigned long int會隨著機器位數的不同而發生變化,比如在16位機上為16為,在32位機上為32位,在64位機上為64位。看看最原始的定義就知道了。dword是無符號的,相當於unsigned long 它是mfc的資料型別。而int是有符號性的,...

JAVA中float與double的區別

float是單精度型別,精度是6位有效數字,取值範圍是10的 38次方到10的38次方,float占用4個位元組的儲存空間 double是雙精度型別,精度是15位有效數字,取值範圍是10的 308次方到10的308次方,double占用8個位元組的儲存空間 當你不宣告的時候,預設小數都用double...