2013-08-20 3 views
3

Я только что увидел это в первый раз. Исходный код Я смотрю на это в CЧто означает меньше 0. (0 точка)?

if(rate < 0.){ 
    ... 
} 
else{ 
    ... 
} 

Что произойдет, если rate=0?

+0

Это должно быть '0.0' try' sizeof (0.)'. –

+13

@GrijeshChauhan: '0.' и' 0.0' то же самое –

+0

@DavidRobinson да это то, что я имею в виду '0.' is' 0.0'. –

ответ

16

0. является буквальным типом double (и нулевого значения). В отличие от этого, 0 является литералом типа int.

+3

BTW: '0' является восьмеричной константой. ;-) Как _that_ имеет значение. (C11 6.4.4.1 1) – chux

+3

@chux: Ну, конечно, кто бы мог подумать что-нибудь еще? :-) –

6

Он интерпретирует 0. как двойной (0.0) вместо целого числа (0).

Проверить ссылку: из "working code", показывающего различных размеров различных типов нулевых констант:

+6

Это, конечно, не так: если он делает что-то, это делает его двойным, а не int. –

+3

Да, @Phil правильный. Вам нужно 0.0f, чтобы получить значение float, double - значение по умолчанию. – ChrisCM

+0

Исправлено. (Спасибо, что заметили это.) – Jiminion

2

0. является плавающей постоянной и так как он не имеет суффикс она является double, из draft C99 standard раздела 6.4.4.2Плавающие константы мы имеем следующую грамматику:

 
floating-constant: 
    decimal-floating-constant 
    hexadecimal-floating-constant 
decimal-floating-constant: 
    fractional-constant exponent-partopt floating-suffixopt 
    digit-sequence exponent-part floating-suffixopt 
[...] 
fractional-constant: 
    digit-sequenceopt . digit-sequence 
    digit-sequence .         < ---- This covers 0. 
[...] 

Затем мы имеем в пункт :

Неиспользуемая плавающая константа имеет тип double. Если суффикс буквой f или F, он имеет тип float. Если суффикс буквой l или L, он имеет тип long double.

Смежные вопросы