sizeof float (3.0) против (3.0f)

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

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

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

Почему так?


person kumar    schedule 31.08.2009    source источник


Ответы (3)


Потому что 3.0 — это дубль. См. Синтаксис C Типы с плавающей запятой.

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

person Eugene Yokota    schedule 31.08.2009
comment
Как десятичные, так и шестнадцатеричные константы с плавающей запятой могут иметь суффикс f или F, чтобы указать константу типа float, l или L, чтобы указать тип long double, или оставить без суффикса для двойной константы. =› это слишком быстро, чтобы получить ответ здесь :) - person kumar; 31.08.2009

  • 3.0f — число с плавающей запятой (4 байта)
  • 3.0 двойное (8 байт)

дополнительная информация

person Aziz    schedule 31.08.2009

3.0 это double, а не float.

doubles в два раза шире, чем floats.

EDIT: 3.0d только на C#

person SLaks    schedule 31.08.2009
comment
Нет суффикса с плавающей запятой «d» («l» и «L» дают long double, «f» и «F» дают float, а отсутствие суффикса дает double) - person AProgrammer; 31.08.2009
comment
В IEEE754 double в два раза шире float ; Однако C не требует IEEE754. - person M.M; 04.05.2017