2016-10-03 79 views
-6

我在研究程序如何將數據保存在內存中。 所以我做了一個簡單的程序,包含了全球雙變量:查看內存雙變量

#include <iostream> 
#include <conio.h> 

using namespace std; 

double b = 512; 

int main(){ 
    getch(); 
    return 0; 
} 
當我想從只讀存儲器(在我的情況CheatEngine)的程序在內存中搜索這個雙變量

,我看到的東西不清楚。

CheatEngine發現512內存:

1st Picture

當我將其轉換爲十六進制,它表明:

2nd Picture

當我瀏覽存儲這個變量的位置,它就像:

3rd Picture

所以我將512從十進制轉換爲十六進制,它是200,但在第二張圖片中沒有任何類似的200。

什麼是第二張圖片中的4080000000000000以及它如何等於512?

+2

完全不清楚你在問什麼。 –

+3

雙類型使用IEEE標準進行編碼,而不是整數。 –

+1

查看:https://en.wikipedia.org/wiki/IEEE_754-1985 –

回答

5

4080000000000000是+ 512.0的雙重表示。記憶中的雙數表示爲符號,指數和尾數。

 4 0 8   0  00  00  00  00  00  00 
0 100 00001000  0000 00000000 00000000 0000000 000000000 00000000 00000000 
^ ------------  ---------------------------------------------------------- 
|   
sign exponent = 2^9 mantissa with implicit high bit = 1 (normal) 

所以表示的數字是2^9 * 1.0 = 512.0。

  • (408) = 1032
  • 指數= 2 ^(1032至1023年)= 2^9,其中1023是指數偏壓
1

正如Jean-Francoise指出的,Integer和floating point號碼在內存中的表示方式不同。

一個double數據類型是一個64位寬的浮點數,同時0x200是512

整數表示您還可以使用GDB檢查你的程序的存儲器的內容,爲您提供啓用調試信息包含在你的程序中。