является ли if (float> int) действительно if (float> (float) int)? - PullRequest
0 голосов
/ 23 июля 2011

равно

 if(float > int)

действительно просто

 if(float > (float)int)

Я занимался такими исследованиями, и, похоже, стоит делать float для int и int для бросков float. У меня много сравнений float / int.

Просто быстрый вопрос

Ответы [ 2 ]

6 голосов
/ 23 июля 2011

Да!

Это одно и то же.

Существует без инструкции для прямого сравнения с плавающей запятой с целым числом, поэтому сначала оно приводит к float.


Тем не менее:

Будьте осторожны: не означает, что преобразование int в float без потерь. Он все еще может потерять некоторую информацию, поэтому этот код:

(int)(float)integer == integer

не всегда оценивается в true! (Попробуйте с помощью int.MaxValue, чтобы увидеть. То же самое с double / long.)

3 голосов
/ 23 июля 2011

Да.Там нет оператора >(float, int) - просто> (int, int) и >(float, float).Таким образом, компилятор вызывает последний оператор путем преобразования второго операнда в float.См. Раздел 7.3.6.2 спецификации C # для получения более подробной информации:

Двоичное числовое продвижение происходит для операндов предопределенных +, -, *, /%, &, |, ^, ==,! =,>, <,> = и <= бинарные операторы.Двоичное числовое продвижение неявно преобразует оба операнда в общий тип, который, в случае нереляционных операторов, также становится типом результата операции. </p>

(Затем перечисляются соответствующие шаги.)

Вы уверены, что преобразование int в float занимает много времени?Это должно быть довольно дешево.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...