int類型定義,float、double類型引用造成的結果

測試程序:


//main.c

int x = 0x1234;
int y = 0x2345;

int t = 0x3456;
int k = 0x4567;

void int2double();

int main(){
	int2double();
	printf("x:0x%x, y:0x%x, t:0x%x,k:0x%k\n", x, y , t, k);
	return 0;
}


//int2double.c
double x;
float t;

void int2double(){
		x = -0.0;
		x = -8.25;   	//8.25 = 1000.01b
		x = -0.25;		//0.25 = 0.01b;

		t = 0.0;
		t = 8.25;
		t = 0.25;
}


在main.c中定義的int類型x,y, t,k在int3double.c中用double,float類型引用會使xytk的值變成什麼?
8.25用二進制數表示爲:1000.01,用科學計數法表示爲: 1.00001 * 2^3。

所以根據IEEE標準,float類型-8.25在內存中的存儲爲:

符號位-----指數(8位)-----尾數

  1-----------127+3--------00001 ==0xc104 0000

根據IEEE標準,浮點數的指數部分要加上基127,尾數部分只取科學計數法的小數部分即可。

所以根據IEEE標準,double類型-8.25在內存中的存儲爲:

符號位------指數(11位)------尾數

  1-----------1023+3----------00001 == 0xc020 8000 0000 0000

根據IEEE標準,浮點數的指數部分要加上基1023,尾數部分只取科學計數法的小數部分即可。


0.25用二進制數表示爲:0.01,用科學計數法表示爲: 1.0 * 2^(-2)。

所以根據IEEE標準,float類型-0.25在內存中的存儲爲:

符號位--------指數(8位)-----------尾數

  1-------------127-2----------------0     ==  0xbe80 0000;

double類型-0.25在內存中的存儲爲:

符號位--------指數(11位)----------尾數

  1-------------1023-2---------------0 ==  0xbfd0 0000 0000 0000;


那麼問題就來了,float類型的0.0在內存中怎麼存儲?

難道是下面這樣嗎?

符號位------指數-------- 尾數

    0----------127+0---------0  == 0x7f80 0000

其實不是的,0.0在內存中的存儲就是0;

計算機不會按照float類型去存儲0.0,而是按照整數類型的0存儲的。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章