當前位置:首頁 » 編程語言 » c語言浮點數的存儲
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言浮點數的存儲

發布時間: 2022-09-11 02:19:36

c語言實型(浮點型)數據在內存中的存放形式

實數分為float型和double型,它們分別對應IEEE 754標准中的單精度浮點數和雙精度浮點數類型,在內存中的存儲形式遵守IEEE 754浮點數標准。以float類型數據為例,3.14159表示成二進制為11.0010010000111111001111......,規格化後表示為1.10010010000111111001111×2^1(小數點後保留23位有效數字,因為IEEE 754標准規定的尾數為23位);指數為1,故階碼為1+127=128=10000000;這是一個正數故符號位為0,因此它在內存中的表示形式是0 10000000 10010010000111111001111,寫成16進制為40490FCF。

⑵ c語言中double和float它們存儲時分別占據多大的內存空間

double
中文譯為雙精度浮點數,一般稱雙精度數,它在內存中佔用8個位元組(位、bit)的空間;float
中文譯為單精度浮點數,一般就稱為浮點數,它在內存中佔用4個位元組的空間。

⑶ C語言二進制浮點數儲存方式

float 單精度說明符,在Turbo C中單精度型佔4個位元組(32位)內存空間,其數值范圍為3.4E-38~3.4E+38,只能提供七位有效數字。
double 雙精度說明符。雙精度型佔8 個位元組(64位)內存空間,其數值范圍為1.7E-308~1.7E+308,可提供16位有效數字。

其實記起來非常簡單的- -!!
自己編個程序看看~~
void main()
{
float a;
double b;
a=33333.33333;
b=33333.33333333333333;
printf("a=%f\n,b=%f\n",a,b);
}
然後~~~
答案是
a=33333.332131
b=33333.333333
由於a 是單精度浮點型,有效位數只有七位。而整數已佔五位,故小數二位後之後均為無效數字。(就是2131那部分)。
b 是雙精度型,有效位為十六位。應該顯示全部小數,但是!!!!Turbo C 規定小數後最多保留六位,其餘部分四捨五入。所以答案是這個。。

這樣解釋的行嗎?打字太累了~~~

⑷ C語言浮點數的儲存方式為何浮點數儲存不準確那個圖片是什麼意思

C語言中,無論是單精度還是雙精度在存儲中都分為三個部分:
1. 符號位(Sign) : 0代表正,1代表為負
2. 指數位(Exponent)(註:也叫階碼):用於存儲科學計數法中的指數數據,並且採用移位存儲(註:移碼編碼表示)
3. 尾數部分(Mantissa):尾數部分
關於不精確是由於十進制小數部分化二進制,常常化不盡。如同無限循環小數,最後有截斷誤差。
圖片中的是float型的變數的存儲上的格式。

⑸ C語言中浮點數為什麼不能准確存儲

浮點數,即雙精度double型或單精度float型,拿雙精度的double來說,定義一個double型的變數,如
double
a;那麼a在內存中開辟了一個32位的空間來存儲變數a,但是你要存儲變數a,計算機要將浮點數a用一個定點整數和一個定點小數表述,在對階碼的時候,由於各個計算機CPU的字長不一樣,可能造成對階時產生小數部分丟失,這樣造成了存儲不準確。建議看看組成原理。

⑹ 關於浮點數在C語言中的存儲問題

你要明白計算機內存只能存儲二進制數據,因此人類習慣的十進制只能通過一定的格式進行轉換,只要是轉換,就有可能丟失精度.實際上大部分CPU對浮點數和雙精度都是按國際規定格式操作的,而轉換工作也是CPU內部的基礎功能之一.聽說過"XXCPU的浮點運算很強"這樣的說法吧.其實這也就是在講CPU對浮點數或者雙精度進行解碼編碼以及運算的能力/效率.

給你段代碼你可以自己調試玩玩可以幫助你理解,你可以修改fl的初始值查看各種浮點數

#definePAUSEsystem("pause")//這個復制到主函數外面

charc,*p1;

char*p;

floatfl=-3.1415926f;

float32*fp;

uintu,e,i;

byteb;

fp=(float32*)&fl;

cout<<"解析浮點數"<<fl<<"在內存中的16進制編碼"<<endl<<endl;

p=MemMap::ToString(fl,'x',1);

cout<<"內存中位元組的存儲順序:"<<endl<<p<<endl<<endl;

delete[]p;

p=MemMap::ToString(fl,'x');

cout<<"轉置後的位元組順序:"<<endl<<p<<endl<<endl;

delete[]p;

p=MemMap::ToString(fl,'0');

cout<<"二進制碼:"<<endl<<p<<endl<<endl;

delete[]p;

p=MemMap::BitMap((void*)&fl,0x80000000);

cout<<"符號的點陣圖(1代表負數,0代表正數):"<<endl<<p<<endl<<endl;

delete[]p;


p=MemMap::BitMap((void*)&fl,0x7f800000);

cout<<"階碼的點陣圖:"<<endl<<p<<endl;

delete[]p;

e=fp->exp-127;

cout<<"提取階碼其值為:"<<fp->exp<<",解碼後為:"<<fp->exp-127<<",意思為小數點向右移"<<e<<"位。"<<endl<<endl;

p=MemMap::BitMap((void*)&fl,0x007fffff);

cout<<"尾數的點陣圖:"<<endl<<p<<endl;

delete[]p;

u=fp->m|0x00800000;//補上二進制尾數的最高位

p=MemMap::ToString((void*)&u,4,'b');

cout<<"編碼時整數的1是省略的,因此補上1,也即小數點在尾數之前:"<<endl<<p<<endl;

delete[]p;

i=u>>(23-e);

cout<<"根據階碼向右移動小數點並取出整數部分:"<<i<<endl;

i=0xffffffff;

i=i>>(32-23+e);

i=i&u;

cout<<"小數部分轉十進制為:"<<abs(fl)-3<<endl;

PAUSE;

下面是運行結果:

⑺ c語言中浮點型數據的存儲方式

所謂浮點數, 其實就是二進制的科學計數法. 十進制的科學計數法為 a.b * 10^n (這里 "^" 表示冪). 其中a 大於或等於1而小於10. 只有0不能用這個形式表示.

二進制的科學計數法為 1.x *10^N, 整數部分恆為1, 所以只要存貯X與N就可以.一般都是用一個位存貯符號, 再用幾個二進制位存貯X, 另幾個二進制位存貯N. 原則就是這樣了, 但具體的格式又有所區別. 比如按IEEE來說, 有單精度, 雙精度等; 還有一些軟體自己定義的格式, 空間哪些位存貯X, 哪些位存貯N, 0怎麼辦, NaN怎麼表示, 等等都要自己規定.

⑻ c語言中double型數據在內存中 佔多少個位元組來存儲

c語言中double(雙精度浮點型)是計算機使用的一種數據類型。double(雙精度浮點型)使用 64 位(8位元組) 來儲存一個浮點數。 它可以表示十進制的15或16位有效數字,其數值范圍為-1.79769313486232E308 到1.79769313486232E308。

(8)c語言浮點數的存儲擴展閱讀:

double(雙精度浮點型)數值可轉換到其他類型的整數或浮點數,反之亦然。double(雙精度浮點型)常量的最後一個字元可加上「d」或「D」。其存儲格式與浮點型類似,最高位為符號位,次高11位為指數位,其次52位為尾數。

double(雙精度浮點型)同數值型比,它能提供更高的數值精度,採用固定存儲長度的浮點數形式,與數值型數據不同,它的小數點位置是由輸入的數據值來決定的,並且只能用於表中的欄位。

⑼ c語言浮點數存儲問題:c語言浮點數在內存中的存儲形態是什麼樣的3個位元組存儲有效數字的范圍為什麼是6到7

C語言的浮點數遵循 IEEE 754 標准,請查閱相應資料即可。
浮點數的含義就是小數點不是固定的,其精度也不是固定的,舉例來說,C語言中的float類型佔用4個位元組長,這4個位元組分為如下3部分:
1位符號位 8位階碼 23位尾數部分
這23位尾數才真正存儲了二進制的有效位,將這23位二進制轉換為十進制也就6到7位有效數字。

⑽ 在c語言中,不帶任何修飾符的浮點常量是按什麼類型數據存儲的

在c語言中,不帶任何修飾符的浮點常量是按double類型數據來存儲的。

下面這個例子就能驗證:

#include <stdio.h>

int main()

{

printf("sizeof(double)=%d ",

sizeof(double));

printf("sizeof(float)=%d ",

sizeof(float));

printf("sizeof(1.1)=%d ",

sizeof(1.1));

printf("sizeof(1.1F)=%d ",

sizeof(1.1F));

return 0;

}

運行截圖: