C語言20 0(3 6 10 0)算出來的結果為什麼是0不是0 0不是低精度轉化為高精度嗎

2022-11-01 06:15:38 字數 2900 閱讀 3048

1樓:金色潛鳥

上式中,按運算子優先順序,要先計算小括號內的東西。

小括號內 3/6 最優先。

c 語言中 3/6 是整常數除以整常數, 處理為 」整除「運算,商為 0。

然後 執行 (0 * 10.0), 這時 再 低精度轉化為高精度 0.0 * 10.0 得 0.0,

20.0 * 0.0 最終結果是 0.0。

若,你寫: (3.0/6*10) 或 (3/6.0 * 10) 或 (3.0/6*10.0),小括號部分,就得 5.0

2樓:匿名使用者

強制轉換型別很多;

例如: (float) a 把a轉換為浮點型,(int)(x+y) 把x+y的結果轉換為整型。

強制型別轉換是通過型別轉換運算來實現的。其一般形式為: (型別說明符) (表示式) 其功能是把表示式的運算結果強制轉換成型別說明符所表示的型別。

double ←── float 高

↑long

↑unsigned

↑int ←── char,short 低● 圖中橫向箭頭表示必須的轉換,如兩個float型數參加運算,雖然它們型別相同,但仍要先轉成double型再進行運算,結果亦為double型。 縱向箭頭表示當運算子兩邊的運算數為不同型別時的轉換,如一個long 型資料與一個int型資料一起運算,需要先將int型資料轉換為long型, 然後兩者再進行運算,結果為long型。所有這些轉換都是由系統自動進行的, 使用時你只需從中瞭解結果的型別即可。

這些轉換可以說是自動的,當然,c語言也提供了以顯式的形式強制轉換型別的機制。

3樓:藤原子大雄

前者用整數運算單元計算的,後者用浮點運算單元計算的。

兩個運算單元對這種情況的處理不同,前者是產生異常,後者是給出infinite(無窮大)的結果(也算是一種異常吧……?)

4樓:

正好是0,cout做了特殊處理把。

這個c語言程式為什麼會輸出 0

5樓:老馮文庫

c的值為1.5,如果對應%f輸出,則輸出1.5,對應%d輸出,則按整型數輸出。

但c是按浮點型儲存的,即1.5 = 0.75 * 2,儲存時,只儲存尾碼0.

75(二進位制為0.11)和階碼1(二進位制為1)即可,佔8個位元組,按int型輸出時,只取前4個位元組。

double浮點數佔8位元組,64位,int數佔4位元組,32位。

double浮點數從高到低位分別儲存符號位(1位)、指數部分(11位)和小數部分(52位)

1.5的浮點儲存格式為:

0 000 0000 0001 011(後面49個0)

符號位(0表示正數) 指數部分(1) 小數部分(0.75)

按整型數輸出時,取低32位(全0):

即輸出0。

6樓:匿名使用者

#include

void main()

/* 因為double的精度比int 高,在進行型別轉化的時候(因為你用%d輸出即int型別)所以就丟失了精度,因此在計算過程中要避免把高精度的值轉化為低精度的*/

7樓:呀咪娛樂播報

在上面的程式輸入的時候,定義double x=1,y=2時這是整型常量,在下面c=1.0+x/y時你輸入的是一個實數(1.0),加上兩個整型常數相除,這是程式定義的錯誤,把上面的x=1,y=2改成x=1.

0,y=2.0(實數)就可以了,還有最下面的%d是輸出的整數,只有小數點前的結果,改成%f(輸出單雙精度,隱含6位小數點)就會顯示出小數點以後的結果,就是全部答案

8樓:

因為雙精度的資料的分配空間是8個位元組,以補碼的形式進行運算,而整型量的分配空間只有兩個位元組。在c被賦值double型的1.50000000,它在記憶體中的儲存形式是64位,printf函式在輸出整型格式的時候是擷取前八位,忽略後面,最後輸出為0;

9樓:瘋狂的小子啊

x/y = 0 , 1.0+x/y = 1.0再將1.

0+x/y賦給c, c = 1.0在printf函式中,格式%d需要int型別,但c的型別是double,在編譯時會出現警告,結果為0

今後注意點就行了!

10樓:匿名使用者

看到樓上的答案!我恍然大悟啊!

11樓:

printf("%d\n",c);//c是doube型,不要以整型十進位制(%d)輸出,要以%f或%lf輸出,改為:

printf("%lf\n",c);

12樓:

我只知道,列印時用%f就會出來正確結果,但不知道為什麼%d會為0.

[c語言]printf("%f\n",1.0/3*3)與printf("%f\n",1/3*3)計算結果為什麼不同?

13樓:網海1書生

1.0/3*3這是按浮點數進行計算,1.0/3*3=0.333333...*3=1

1/3*3這是按整數進行計算,1/3*3=0*3=0 (1/3的值會先取整,結果為0)

產品進為7元我想有20個點的利潤,是7 (7*0.2)=8.4嗎?另還有一個演算法是7/0.8=8.75

14樓:匿名使用者

20個點就是20%的意思,可是你的利潤指什麼呢,利潤利潤率通常分為:成本利潤率=利潤÷成本×100%和銷售利潤率=利潤÷銷售×100%兩種,如果是前者,8.4是對的,如果指後者,8.

75是對的,關鍵看你這20%是指誰的20%,成本的還是賣價的

C語言裡5 3的值 是怎麼算出來的

在c語言裡!的意思是 非 5 3就是5非等於3,就是5不等於3,這邏輯是對的,所以值是1 如果為3!3的話,值就為0了。是c語言中的非運算子,在變數前面使用它,會構建非運算表示式,表示式的返回結果是個布林值 也就是隻有true或false 對變數使用時,如果變數不是布林資料型別,將會強制轉化為布林型...

C語言,不知道答案怎麼算出來?includestdio

x 5 6,x 4,x 5 這是一個逗號表示式1 逗號表內達式格容 式 表示式1,表示式2,表示式3,表示式n 2 逗號表示式的計算過程為 從左往右逐個計算。3 逗號表示式是作為一個整體的,它的最終結果就是最後一個表示式 即表示式n 的值。4 逗號運算子的優先順序別是所有運算子中最低的。所以 x 5...

踏步怎樣算出來呢13個踏步怎樣算出來呢

水平 12 踏面寬度 垂直 13 踏步高度 舉例 踏步高度150,踏步寬300,則水平總長12 300 3600垂直高13 150 1950 你會算了嗎?題目其它條件呢 需要補充後,來回答 請理解並補充完整。你要算什麼?13個踏步有多高?用了多少料。耗費多少人工多少工時,總成本多少。或者使用壽命,最...