Sizeof float (3.0) vs (3.0f)

В чем разница между sizeof (3.0) и sizeof (3.0f)

Я ожидал, что оба они дадут тот же результат (sizeof float).. но его разные.

В 32-битной машине, gcc-компилятор, sizeof (3.0f) = > 4 sizeof (3.0) = > 8

Почему так?

Ответ 1

Потому что 3.0 является двойным. См. Синтаксис синтаксиса с плавающей точкой.

Константы с плавающей запятой могут быть записанный в десятичной системе обозначений, например. 1,23. Научная нотация может быть использована путем добавления e или E, за которым следует десятичная показателем, например. 1.23e2 (который имеет значение 123). Либо десятичная точка, либо требуется экспонента (в противном случае, число - целочисленная константа). C99 введен шестнадцатеричный константы с плавающей запятой, которые следуют аналогичные правила, за исключением того, что они должны быть с префиксом 0x и использовать p для указания шестнадцатеричный показатель. Как десятичные, так и шестнадцатеричные константы с плавающей запятой может быть суффикс f или F для указания константа типа float, на l или L до укажите тип long double или left unsuffixed для двойной константы.

Ответ 2

  • 3.0f - float (4 байта)
  • 3.0 - двойной (8 байтов)

подробнее

Ответ 3

3.0 является double, а не float.

doubles в два раза больше, чем float s.

EDIT: 3.0d находится только в С#