是is if(float> int)if(float>(float)int)?
if(float > int)
真的只是
if(float > (float)int)
我就是這麼做的研究,這似乎是它的成本有很多事情要做浮動爲int和int浮動轉換。 我有很多float/int比較。
只是一個簡單的問題
是is if(float> int)if(float>(float)int)?
if(float > int)
真的只是
if(float > (float)int)
我就是這麼做的研究,這似乎是它的成本有很多事情要做浮動爲int和int浮動轉換。 我有很多float/int比較。
只是一個簡單的問題
還有沒有指令直接比較一個浮點數到一個整數,所以它首先將整數轉換爲float
。
注意:那請問不意味着int
至 - float
轉換是無損。它仍然會丟失一些信息,所以這段代碼:
(int)(float)integer == integer
並不總是爲true
! (與int.MaxValue
一起去看看,與double
/long
同上。)
是的。沒有>(float, int)
運算符 - >(int,int)和>(float, float)
。因此,編譯器通過將第二個操作數轉換爲float
來調用後者。有關詳細信息,請參閱C#規範的部分7.3.6.2:
二元數值提升是針對預定義的操作數+, - ,*,/%,&,|,^,==,=! >,<,> =和< =二元運算符。二進制數字提升隱式地將兩個操作數轉換爲一個通用類型,在非關係運算符的情況下,它也成爲操作的結果類型。
(然後,它列出了涉及的步驟。)
您確保int
到float
轉換過程中大量的時間有關係嗎?它應該很便宜。
值得注意的是,雖然'1000000001>(float)1000000000' wo ;;返回false,這是因爲後者的數量並不真正代表「1,000,000,000」。相反,它代表「999,999,968和1,000,000,032之間的數字」;前者的數量並不明顯大於後者。請注意,1222333443將等於1222333444f,但1222333443.0將比較大於1222333444f,因爲後者將被強制轉換爲1222333440.0(浮點數與雙精度轉換之間的轉換由較少特定轉換爲更具體的「擴展」 - 與其他類型相反)。 – supercat
@supercat:心靈==吹 – Mehrdad