上海 網(wǎng)站備案系統(tǒng)windows優(yōu)化大師會(huì)員兌換碼
1.0 浮點(diǎn)數(shù)指針
float f= 1.2f:如何將它對(duì)應(yīng)的4個(gè)字節(jié)地址空間的數(shù)值以十六進(jìn)制打印出來?
數(shù)據(jù)在所有計(jì)算機(jī)中都是以二進(jìn)制形式存儲(chǔ)的,然后以8個(gè)位為一個(gè)單元稱作“字節(jié)”,作為計(jì)
量和運(yùn)算處理單元,比如我們說一個(gè)文件大小是1MB,指的是1M字節(jié);
在計(jì)算機(jī)中,每個(gè)字節(jié)都有它對(duì)應(yīng)的地址,類似于門牌號(hào),CPU通過地址來訪問這個(gè)字節(jié)空間
2.0 引入數(shù)據(jù)類型
對(duì)于計(jì)算機(jī)硬件系統(tǒng),二進(jìn)制01數(shù)據(jù)沒有任何意義,為了有效的組織管理這些數(shù)據(jù),人為的規(guī)
定了數(shù)據(jù)類型去解釋這些二進(jìn)制數(shù)據(jù):
3.0 應(yīng)用案例
int main(void)
{float f = 1.2f;uint8_t *p;p = (uint8_t *)&f;printf("*p = %#x.\n",*p);p++;printf("*p = %#x.\n",*p);p++;printf("*p = %#x.\n",*p);p++;printf("*p = %#x.\n",*p);return 0;
}
運(yùn)行以上程序輸出如下結(jié)果:
uint8 tvalue[4]={0x9A,0x99,0x99,0x3F};如何轉(zhuǎn)換為float類型數(shù)值并打印?
案例分析:
- 可以定義float *f,用它來保存數(shù)組的首地址
- 但是此時(shí)由于類型不匹配,需要強(qiáng)制類型轉(zhuǎn)換
- 然后可以使用*f去訪問這段內(nèi)存空間了,調(diào)用printf函數(shù)
int main(void)
{uint8_t value[4] = {0x9A, 0x99, 0x99, 0x3F};float *f = (float *)value;printf("*f = %.1f\n",*f);return 0;
}
運(yùn)行以上程序輸出如下結(jié)果:
...