是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