C語言,int與double的問題,求助

時間 2021-10-17 02:37:57

1樓:匿名使用者

這個解釋起來還真是麻煩。需要你瞭解計算機中浮點數的表示方式。由於計算機以2進位制儲存資料,

所以小數用2進位制儲存的時候,就變得非常麻煩。

我們知道:

1/2 = 0.5

1/4 =0.25

1/8=0.125

1/16=0.0625

1/32=0.03125

1/64=0.015625 .....

以小數點為分界線,從左向右,每一個2進位制的位,就代表上面依次向下的計算結果。

比如小數點後面的2進位制數為1101

就表示0.5+0.25+0+0.0625 = 0.8125

相反,我們把0.8125這個數化成2進製表示時,就需要這樣計算

先確定第1位上的2進位制數是1還是0,由於0.8>0.5,所以確定是1

然後0.8125-0.5=0.3125

再確定第2位上的2進位制數是1還是0,由於0.3>0.25,所以確定是1

然後0.3125-0.25=0.0625

然後確定第3位上的數字是1還是0,由於0.0625<0.125,所以確定是0

再確定第4位上的數字是, 由於0.0625正好等1/16,所以確定是1,

再次相減後為0,小數表示完成,就是1101

以你的例子:d-b=0.54000

化為2進位制數就是10001010001.....

用2進製表示,是一個非常長的1,0組成的串,我沒算到底,不過可以確定,是一個很長的數。

然而計算機儲存double型資料使用的8byte,也就是64bit, 而且這64bit沒有完全使用上,還有符號位等,也就是說,計算機並沒有完全的把0.54這個數字完整的用2進位制數字表示出來。基本上可以確定是<0.

54的,也就是0.539......

所以,當x100,時變成了53.9.....

而用int時,取整,截斷了小數點後面的資料,所以變成了53

2樓:匿名使用者

double或float型別強制轉換為int型別,都是隻保留整數位,直接捨棄小數位,而不是四捨五入。

要想實現四捨五入,要在你的求得的公式裡面 + 0.5 才行。

3樓:陽光上的橋

d=c-a的結果我們計算了是2.54,但是計算機裡面完全可能是2.53999999,也可能是2.

54000001,這是因為浮點數表示的十進位制小數始終可能無法精確表示,任何時候都記住這一點,獲取小數的整數部分應該使用floor、round、ceil等函式,避免型別轉換。

4樓:

跟蹤一下看看b是什麼值

c語言,簡單的double和int的問題,求救啊!!

5樓:滄海雄風

把if後面的 ;去掉

看好 你三個if判斷後面都有

否則就與後面的;構成了一個空的

if(x<20);

等價於i if(x<20)

有問題請追問 滿意記得采納

6樓:匿名使用者

你的if語句後面根本就什麼也沒做,因為';'使得if語句提前結束了,改為這樣就對了

#include

int main()

if((x>=20)&&(x<=100))if(x>100)

return 0;}

7樓:匿名使用者

樓主你好!

我很不情願的說下面這句話!

你是新手,新手得好好看書,你的if語言再看一遍……if (條件 ); //這邊你多了一個分號!

還是那句話,你再看一邊if語句的語法,分號是木有的!

8樓:匿名使用者

if語句後不能加分號 ,如果加分號會認為if語句執行完畢,程式會直接執行大括號內的語句,起不到判定作用

程式修改為下面的會更清楚

#include"stdio.h"

void main()

else

if(x<=100)

else

return 0;

} if else語句能使該程式簡潔。

9樓:匿名使用者

去掉if後面的分號 ;

10樓:匿名使用者

if()後面沒有冒號

11樓:

if(x>100); //這裡多了一個分號。把這個分號去掉.就可以了

12樓:淦海瑤

if(x<20.0);

這樣試試

13樓:

請注意:

if(x<20);

if((x>=20)&&(x<=100));

if(x>100);

if判斷語句後加了分號,編譯時會被識別為: if(x>100){};

但是這個一般編譯器都會給你一個警告的。仔細看看

14樓:匿名使用者

if和 if之間加個else 構成巢狀

j**a中int和double的問題

15樓:育知同創教育

兩個int的值作除法運算,得到的為int,而且,得到的值是直接去掉小數部分。

假如:int i=1;j=3;i/j==0 返回的為true

同理,i/3==0 1/3==0 1/j==0都是返回為true

如果,double res=i/j 其返回的結果,不會是0.333...,而是0

如果你要得到為0.333...,則需要 res=((double)i)/j;

而你的freuslt=(int)((double)num1/num2)

則會先執行num1/num2,如果num1和num2都int,都到的結果最終會是int,這裡假設num1=6,num2=5,則num1/num2==1 為true,而不是1.2,那麼,再執行(double)res,這裡的res就是num1/num2,故res=1,所以double之後仍然為1,而不是1.2

16樓:匿名使用者

int型除法下取整。1/5=0;double型乘法結果 0*5 = 0.0

c語言 int型別的可以和double型別的比較大小嗎

17樓:匿名使用者

肯定可以啊。

但運算的話:

有相容性的,佔空間小的資料型別,可以給佔空間大的資料型別賦值不相容的,可能會造成資料丟失。int ->float可以轉換;float->int 小數部分丟失

也就是說那得看你的變數型別

你最好是先將他們轉換為同一型別量

變數的型別不管 主要是你的賦值型別

希望能幫到您。敬請採納!

中國物聯網校企聯盟

18樓:匿名使用者

可以比較大小,int類會被提升為double類再比較

19樓:43青年

可以啊int a=2;

double b=1.1

//隱式轉換,相當於if( (double)a >b )if( a> b)

20樓:程式猿3號

是可以比較的:

#include

int main()

int a=9;

double b=9.999999;

if(a > b)

printf("a>b\n");

else

if(a -  b > 0)

讓他與0比較是正確的方法

c語言中int型變數加上double型的變數

程振 會將int型別轉換成double型別再與double型別的變數相加。型別不一樣的數相加,首先將型別轉換成一樣的然後相加,轉換原則,短型別向長型別看齊,長短指在記憶體中所佔空間的長短 得出的結果是double型.這個不需要強制轉換的,系統會自動轉換的. double,計算時會自動轉化之doubl...

C語言中int的含義,c語言中int 代表什麼意思

int 定義一個整型變數。比如 int i 表示定義一個整數i 也可以賦予初始值。int i 1 int後接一個字元是定義一個整型變數,vc中佔四位元組。c語言中int 代表什麼意思 c c 程式語言中,int表示整型變數,是一種資料型別,用於定義一個整型變數,在不同編譯環境有不同的大小,不同編譯執...

c語言int最大值是多少,C語言int型別最大值是多少?

當無符號0以二進位制儲存在記憶體中的時候,每一位都為0,以32位int為例,unsigned int 0的二進位制為 按位取反 後,變成 此時的十進位制為 除以2 因為int型別中有一半表示負數且比正數多一個 之後為 即為32位int型別最大值。c語言中最大的整型資料型別是long型別,佔4個位元組...