[英]Is any precision difference between (float + int) and (float + (float)int) in C++?
[英]checking for equality between an int and float in C
我遇到了這段代碼:
int x=3;
float y=3.0;
if(x==y)
printf("x and y are equal");
else
printf("x and y are not equal");
為什么此代碼顯示“ x和y相等”? 在這里,如果y = 3.1(例如),則代碼顯示“ x和y不相等”。 有人請解釋這是怎么回事。
算術類型之間的比較受制於通常的算術轉換 (第5/9,第5.9 / 2,第5.10 / 1節)。 強調我的。
許多期望算術或枚舉類型的操作數的二進制運算符都以類似的方式引起轉換並產生結果類型。 目的是產生一個通用類型,它也是結果的類型。 這種模式稱為通常的算術轉換,其定義如下:
—如果任何一個操作數都屬於范圍枚舉類型(7.2),則不執行任何轉換;否則,將不執行任何轉換。 如果另一個操作數不具有相同的類型,則表達式格式錯誤。
—如果一個操作數的類型為
long double
,則另一個應轉換為long double
。—否則,如果其中一個操作數為
double
,則另一個應轉換為double
。— 否則,如果其中一個操作數為
float
,則另一個應轉換為float
。—否則,應在兩個操作數上執行積分提升(4.5)。 然后,將以下規則應用於提升后的操作數:
—如果兩個操作數具有相同的類型,則無需進一步轉換。
—否則,如果兩個操作數都具有符號整數類型或都具有無符號整數類型,則應將具有較小整數轉換等級的操作數轉換為具有較大等級的操作數的類型。
—否則,如果具有無符號整數類型的操作數的秩大於或等於另一個操作數的類型的秩,則應將具有符號整數類型的操作數轉換為具有無符號整數類型的操作數的類型。
—否則,如果帶符號整數類型的操作數的類型可以表示無符號整數類型的操作數的所有值,則應將無符號整數類型的操作數轉換為帶符號整數類型的操作數的類型。
—否則,兩個操作數均應轉換為與帶符號整數類型的操作數類型相對應的無符號整數類型。
當您嘗試將一個int與一個float進行比較時,該int會首先轉換為float。
所以3 == 3.0f
實際上測試了float(3) == 3.0f
,這是真的。
另一方面, 3 == 3.1f
測試float(3) == 3.1f
,這是錯誤的。
在這個問題中x是一個整數值,而y是一個浮點值...一個整數值和一個浮點值不能相等...所以為了檢查相等性,我們必須將浮點型轉換為整數,反之亦然...希望這可能有助於清除您的概念
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.