Ответ 1
1000
является литералом int
.
1000.
является литералом double
.
1000.f
является литералом float
.
Я следую учебнику о том, как сделать игру с SDL. В определенный момент в учебном пособии мне нужно рассчитать игру FPS. Учебное пособие делает следующее:
caption << "Average Frames Per Second: " << frame / ( fps.get_ticks() / 1000.f );
Теперь я точно знаю, что делает код, кроме той части, где она делит на 1000.f. Я искал, но просто не могу найти, что означает .f.
Итак, мой вопрос: что означает .f? И почему он там?
1000
является литералом int
.
1000.
является литералом double
.
1000.f
является литералом float
.
Это означает, что это константа float
, а не константа double
. Что касается эффекта, то для большинства компиляторов С++ это не будет иметь никакого эффекта, так как float
будет преобразован в double
, чтобы выполнить разделение.
.f
делает число float
.
Просто посмотрите эту интересную демонстрацию:
float a = 3.2;
if ( a == 3.2 )
cout << "a is equal to 3.2"<<endl;
else
cout << "a is not equal to 3.2"<<endl;
float b = 3.2f;
if ( b == 3.2f )
cout << "b is equal to 3.2f"<<endl;
else
cout << "b is not equal to 3.2f"<<endl;
Вывод:
a не равно 3.2. b равно 3.2f
Проведите эксперимент здесь в ideone: http://www.ideone.com/WS1az
Попробуйте изменить тип переменной a
от float
до double
, снова посмотрите результат!
Сообщается, что буквальный 1000.
должен рассматриваться как float
. Посмотрите здесь для деталей.
Это означает, что 1000.f рассматривается как float.
Литерал с плавающей запятой может иметь суффикс (f, F, l или L). "f и F" указывают константу float
и "l и L" a double
.