2012-04-19 79 views
1

這可能是非常基本的,但我很好奇原因是什麼。什麼決定將用於存儲臨時值的數據類型?

當與不同類型的操作,如乘法和除法與不同類型的數據處理(整型,浮點等)什麼決定得到回升,其數據類型?

例如,如果我做到以下幾點:

float a = 5/10; 

我會得到「0」結果,因爲5和10被暫時儲存在我們做的師一個int,然後我們把它在一個浮動。對?

但是,如果我們不是這樣做:

float a = (float)5/10; 

我們得到0.5代替。

在這種情況下,在C中優先使用浮點數時,如何判斷浮點數是多少?

+2

請指定您的編程語言。 – SpeedCrazy 2012-04-19 03:57:24

+0

它有什麼區別?在那種情況下,它將如何在C中工作? – chikuba 2012-04-19 03:59:03

+1

@chikuba是的,它*確實有所作爲。有些語言 - 就像*非常受歡迎的JavaScript一樣 - 沒有「整數」,例如(在JS中'5/10'的結果是'0.5')。請相應更新帖子/標題; -1是針對這樣一個模糊的抽象問題,無法用更多細節來回答。 – 2012-04-19 04:09:18

回答

2

看看這個片段。

float a = 5/10; 

510被表示爲默認的整數C(和Java和C++和Python 2.x的)。他們沒有被指定以任何其他方式存儲;也就是說,它們不匹配浮點類型的外觀。整數除法會導致截斷,所以您每次都會得到值0。

現在,關於第二個片段:

float a = (float)5/10; 

... C(或Java或C++或Python 2.x的),將它解釋爲:

float a = 5.0/10; 

由於浮點值的級別高於整數,它會將整數提升爲浮點數。這被稱爲類型提升。你可以讀一下here

1

編譯器通常不會嘗試「讓你的意思」,因爲這是他們無法得到它的權利每單次。

他們只是按照嚴格的規則來做你告訴他們的事情。

這裏,規則是:用另一個整數除整數返回一個整數。因此,如果您想要浮點除法,只需分割浮點數。

相關問題