2011-07-23 145 views

回答

6

是的!

他们是一样的东西。

还有没有指令直接比较一个浮点数到一个整数,所以它首先将整数转换为float


但是:

注意:那请问意味着int至 - float转换是无损。它仍然会丢失一些信息,所以这段代码:

(int)(float)integer == integer 

并不总是为true! (与int.MaxValue一起去看看,与double/long同上。)

+4

值得注意的是,虽然'1000000001>(float)1000000000' wo ;;返回false,这是因为后者的数量并不真正代表“1,000,000,000”。相反,它代表“999,999,968和1,000,000,032之间的数字”;前者的数量并不明显大于后者。请注意,1222333443将等于1222333444f,但1222333443.0将比较大于1222333444f,因为后者将被强制转换为1222333440.0(浮点数与双精度转换之间的转换由较少特定转换为更具体的“扩展” - 与其他类型相反)。 – supercat

+0

@supercat:心灵==吹 – Mehrdad

3

是的。没有>(float, int)运算符 - >(int,int)和>(float, float)。因此,编译器通过将第二个操作数转换为float来调用后者。有关详细信息,请参阅C#规范的部分7.3.6.2:

二元数值提升是针对预定义的操作数+, - ,*,/%,&,|,^,==,=! >,<,> =和< =二元运算符。二进制数字提升隐式地将两个操作数转换为一个通用类型,在非关系运算符的情况下,它也成为操作的结果类型。

(然后,它列出了涉及的步骤。)

您确保intfloat转换过程中大量的时间有关系吗?它应该很便宜。