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

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

11 голосов
/ 31 августа 2009

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

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

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

Почему так?

Ответы [ 3 ]

24 голосов
/ 31 августа 2009

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

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

10 голосов
/ 31 августа 2009
  • 3,0 - это число с плавающей запятой (4 байта)
  • 3,0 - двойной (8 байт)

подробнее

6 голосов
/ 31 августа 2009

3.0 - это double, а не float.

doubles в два раза шире float с.

РЕДАКТИРОВАТЬ : 3.0d только в C #

...