1. 程式人生 > 其它 >Delphi檢視浮點型別記憶體中實際儲存的資料(IEEE 754)

Delphi檢視浮點型別記憶體中實際儲存的資料(IEEE 754)

IEEE 754瞭解可以參考https://www.cnblogs.com/gyunf/p/12816817.html

 

浮點數的記憶體方式以及由記憶體轉化為浮點數_chenchaoflight的專欄-CSDN部落格  https://blog.csdn.net/chenchaoflight/article/details/9791465?utm_term=delphi%20%E5%86%85%E5%AD%98%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%B5%AE%E7%82%B9%E6%95%B0&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-0-9791465&spm=3001.4430

 

 

 

這裡僅用單精度的浮點型別(Single)做例子

十進位制的0.5 ,IEEE 754實際儲存的二進位制值是00111111 00000000 00000000 00000000  【0(符號位)0111111 0(階碼8位)0000000 00000000 00000000(尾數23位)】,此二進位制的10進位制數:1056964608

十進位制的1.5,IEEE 754實際儲存的二進位制值是00111111 11000000 00000000 00000000【0(符號)0111111 1(階碼8位)1000000 00000000 00000000(尾數23位)】,此二進位制的10進位制數:1069547520

 

十進位制的-0.5 ,IEEE 754實際儲存的二進位制值是10111111 00000000 00000000 00000000  【1(符號位)0111111 0(階碼8位)0000000 00000000 00000000(尾數23位)】,此二進位制的10進位制數:-1090519040

十進位制的-1.5,IEEE 754實際儲存的二進位制值是10111111 11000000 00000000 00000000【1(符號)0111111 1(階碼8位)1000000 00000000 00000000(尾數23位)】,此二進位制的10進位制數:-1077936128

 

0.5和-0.5的IEEE 754浮點型別二進位制值的差別就是符號位(0表示正數,1表示負數)

 

用單精度測試的原因:單精度浮點型別和integer佔用的位元組數一樣(佔4個位元組),開發環境Delphi7

var
  vf:Single;
  vp:PAnsiChar;
begin
  vf:=-1.5;//1.5,0.5
  vp:=PAnsiChar(@vf);
  ShowMessage(IntToStr(Pinteger(vp)^));
end;