C 中和float和double的分別

2022-12-28 11:10:16 字數 6154 閱讀 8872

1樓:匿名使用者

1.&是取地址運演算法,

比如 :

int a = 3;

int *p;

p = &a;//取變數a的地址賦給p,那麼p就指向了a

&也可以做位運算(主要是針對二進位制),表示「按位與」運算

如果兩個數相應的二進位都是1,那麼該位的結果值也是1,否則為0

比如:0&0=0,0&1=0,1&0=0,1&1=1

關於&&,這個是與運算子

真&&真 = 真

真&&假 = 假

假&&真 = 假

假&&假 = 假

要注意的是表示式做與運算

表示式1 && 表示式2

1.首先計算表示式1的值

2.如果表示式1為真,則繼續計算表示式2的值

如果表示式1為假,那麼整個運算式的結果為假, 不會計算表示式2的值;

2.float f=0.4;

if(f==0.4)

cout<<"ok"<

因為float f=0.4;實際上f的值是0.40000001,並不是0.4

當進行f==0.4運算時,兩數並不相等(這裡的0.4其實是double型別的0.40000000000000002)

而如果是double b = 0.4;//其實b的值是0.40000000000000002

執行if(b==0.4)時,兩值相等(因為這裡的0.4其實是double型,值為0.40000000000000002)

其實還可以做這樣一個嘗試:

float f=0.236;其實f的值是0.236000000

double b = 0.236;其實b的值是0.23599999999999999

這是因為浮點型數資料的精度問題導致我們看到的和實際的數是不同的

對你補充的**的&&和&的區別的回答:

int main()

下面做分析:

char a=-128;

char型變數,所以a只佔一個byte,即是隻佔8位

其實a = 1000 0000 //-128

unsigned char b=127;

無符號char型變數,b也只佔一個byte,

其實b= 0111 1111 //127

1.兩者做位運算的按位與運算 得a&b 值為0;

1000 0000

^0111 1111

------------

0000 0000

所以不會輸出yes

2.兩者做邏輯與運算

由於a = -128,不等於0,非零即為真

由於b = 127,也不等0,非零即為真

邏輯與運算是看運算子兩邊是否為真,現在兩邊非零,也就是都為真,所以結果為真

所以會輸出no

2樓:無意秋江水

1.&是位運算子,有些語言也當邏輯運算子(與&&不同的是,所有部分都參與運算)

&&是邏輯運算子,當&&前面為false時&&後面的不進行判斷2.0.4字面值是double型別

可以其後加d或f來確認字面值型別

其中if(f==0.4f)

3樓:匿名使用者

kofeffect 說的不錯

你如果看過 c\c++高質量程式設計 就知道判斷符點型資料

應該用if(b>0.39999999 && b<0.40000001)

4樓:匿名使用者

int main()

可以這樣測試程式

int main()

輸出結果為:yesno

int main()

無輸出結果

c++中float和double的區別以及浮點型指的是什麼啊?

5樓:

是這樣的, 你程式裡的小數, 比如float b[6]=;這一句.

所有已知的小數常量, 編譯器編譯的時候, 都預設把它處理為double型的. 所以最好用double. 當然不是必須, 用float也行.

舉個例,float a=7.3*1.0/3;

得到的結果為,將表示式右邊按照double型資料計算得到的結果, 再轉化成float型的值.

而並不是, 將表示式右邊直接按float型計算得到的結果值.

由於這一點細微的差別,對於某些極特殊的值可能結果略有不同.

6樓:it圈新鮮事

float和double都屬於浮點型,只是精度不同。

float是32位,double是64位

float32位中,有1位符號位,8位指數位,23位尾數位double64位中,1位符號位,11位指數位,52位尾數位

7樓:

float是單精度浮點型,double是雙精度浮點型。

型別 位元數 有效數字 數值範圍

float 32 6-7 -3.4*10(-38)~3.4*10(38)

double 64 15-16 -1.7*10(-308)~1.7*10(308)

long double 128 18-19 -1.2*10(-4932)~1.2*10(4932)

8樓:

浮點數是指浮動小數點的數字,是和小數點固定的整數相對應的。

float用4位元組32位表示浮點數,double用8位元組64位表示。

目前所有的c/c++編譯器都是採用ieee所制定的標準浮點格式,即二進位制科學表示法。

詳情可以閱讀這裡:

9樓:

兩者區別主要在分配儲存空間和描述浮點數所擁有的有效數字位數。通常情況下:

1,大多數情況下,編譯器為float分配4位元組,而為double則分配8位元組。

2,float可提供6位有效數字,而double則可以提供15位有效數字。

所以在應用是需要注意定義資料的精度要求。

c++中float和double的區別

10樓:

是這樣的, 你程式裡制的小數, 比如float b[6]=;這一bai句.

所有已知的du小數常量, 編譯zhi器編譯的時候, 都預設把它dao處理為double型的. 所以最好用double. 當然不是必須, 用float也行.

舉個例,float a=7.3*1.0/3;

得到的結果為,將表示式右邊按照double型資料計算得到的結果, 再轉化成float型的值.

而並不是, 將表示式右邊直接按float型計算得到的結果值.

由於這一點細微的差別,對於某些極特殊的值可能結果略有不同.

11樓:_槑

兩者區別主要在分配bai儲存空間和描述浮du點數所擁有的zhi有效數字dao位數。通常情況下:

1,大專

多數情況下,編譯器為屬float分配4位元組,而為double則分配8位元組。

2,float可提供6位有效數字,而double則可以提供15位有效數字。

所以在應用是需要注意定義資料的精度要求。

12樓:匿名使用者

你應該來是用vc6編譯

的吧?我用源g++ 4.6.3編譯,無bai警告du,結果正zhi

確。vc6編譯出警告是因為,vc6的編譯器dao預設把小數當作const double型別,8個位元組,而float是4個位元組,當然會出警告。想要不出警告,1是改陣列型別,2是在每個數字後面加一個「f」,告訴編譯器把這個數字當作float型別處理

13樓:

不用改成double,你的**我在linux下編譯執行過,可以正常工作。不知道你遇到的是什麼問題

float一般佔用4個位元組,double佔用8個位元組。

14樓:匿名使用者

你這個g是什麼型別的?可能跟它有關係。

15樓:

因為浮點常量如3.1;3.1f是double型別

不換也是可以,換了不會警告了。

16樓:匿名使用者

一個是浮點型,一個是雙精度

c++中,float double區別

17樓:為江山放棄了愛

區別:一、精度的區別

float為單精度,記憶體中佔4個位元組,有效數位是7位。

double為雙精度,佔8個位元組,有效數位是16位。

二、指數和尾數長度的區別

float指數長度為8位,尾數長度23位。

double指數長度為11位,尾數長度52位。

三、取值範圍的區別

float的取值範圍為3.4e-38~3.4e+38。

double的取值範圍為1.7e-308~1.7e+308。

四、ieee的區別

float的ieee為1,遵從的是ieee r32.24 。

double的ieee為1,但遵從的是ieee r64.53。

擴充套件資料浮點型變數:

實型變數分為兩類:單精度型和雙精度型,

其型別說明符為float 單精度說明符,double 雙精度說明符。在turbo c中單精度型佔4個位元組(32位)記憶體空間,其數值範圍為3.4e-38~3.

4e+38,只能提供七位有效數字。雙精度型佔8 個位元組(64位)記憶體空間,其數值範圍為1.7e-308~1.

7e+308,可提供16位有效數字。

實型變數說明的格式和書寫規則與整型相同。

例如: float x,y; (x,y為單精度實型量)double a,b,c; (a,b,c為雙精度實型量)實型常數不分單、雙精度,都按雙精度double型處理。

18樓:柯瑤編輯

float和double都是c++中的浮點型資料型別,三者的區別是:

1、精度

是不同的。

浮點型別是單精度浮點數,雙型別是雙精度浮點數。

2、分配儲存空間。

c++編譯器為浮點型別分配4位元組,為雙型別分配8位元組。

3、有效位的個數是不同的。

float可以提供6位有效數字,double可以提供15位有效數字。

擴充套件資料:

資料介紹

1、轉換成十進位制

它由0-9位數字和小數點組成。例如,0.0,。255.789, 0.13, 5.0, 300, -267.8230都是合法的實數。

2、指數形式

它由十進位制數字、順序碼的符號「e」或「e」以及順序碼(只能是整數,並且可以簽名)組成。

其一般形式為en(一個十進位制數,n為十進位制整數),其值為a*10, n如:2.1 e 5(等於5的2.

1 * 10),3.7依照(等於二十3.7 * 10)的力量,0.

5 e 7(等於0.5 * 10的7次方),0.5 e 7(等於0.

5 * 10的7次方),-2.8依照(等於- 2.8依照(= - 2.

8 * 10-2th權力)。

下面是不合法的實數345 e(沒有decidecimal點)7(十進位制數在e 7(e秩序象徵7)e-5(5號(5號(沒有秩序的象徵)5(這項研究的結果如下:1。no) 2.

7e(無訂單編號)。

標準c允許浮點數使用字尾。字尾「f」或「f」表示該數字是浮點數。例如,356f和356。是等價的。例2.2說明了這種情況:

void main()

void指定main不返回任何值,並且printf顯示結果的結尾

浮點變數:

實變數分為單精度變數和雙精度變數。

型別描述符是浮動單精度描述符和雙精度雙精度描述符。在turbo c中,單精度型別佔用記憶體空間4位元組(32位),其數值範圍為3.4e-38-3.

4e+38,只能提供7位有效數字。雙精度型別佔用記憶體空間8位元組(64位)。其數值範圍為1.

7e-308-1.7e+308,可提供16位有效數字。

實變數具有與整數相同的格式和編寫規則。

例如,浮動x, y;(x, y為單精度實型量)

雙a b c;(a、b、c為雙精度實型量)

實型常數按雙精度處理,不需要單精度或雙精度。

參考文獻:

C裡float和double有什麼區別

型別 位元數 有效數字 數值範圍 float 32 6 7 3.4 10 38 3.4 10 38 double 64 15 16 1.7 10 308 1.7 10 308 簡單來說,float為單精度,記憶體中佔4個位元組,有效數位是7位 因為有正負,所以不是8位 在我的電腦且vc 6.0平臺中...

c語言中,float型和double型變數如果不指定寬度,應

double與float的區別在於在記憶體中存放資料時佔用的記憶體不一樣,前者8位元組,後者4位元組,也就是前者儲存的小數位數比後者多一倍。舉例說明對於1.9999996666,按照float輸出,結果可能為1.999999,如果按照double可能為1.999999。因為c語言預設輸出小數位數都取...

請問c語言中的float和double型別有什麼區別?什麼

c語言中 單精度型 和bai雙精度型 指兩種du 型別 的 浮點數zhi 單精度型dao 即回 float 型,有效數字約10進位制答7位 雙精度型 即 double 型,有效數字約10進位制15位 所以能描述的數值精度不同。c語言 資料 用 ieee 754 國際標準。float 型 用 4 位元...