2009-08-31 32 views
11

是什麼浮動的sizeof(3.0)VS(3.0F)

我期待他們兩人給予同樣的結果(浮動的sizeof)的sizeof(3.0)和sizeof(3.0F)之間的區別..但這不一樣。

在32位機,gcc編譯, 的sizeof(3.0F)=> 4 的sizeof(3.0)=> 8

爲什麼?

回答

24

因爲3.0是雙倍的。請參閱C syntax Floating point types

浮點常量可能是用十進制表示法寫的 ,例如, 1.23。通過加上e或E,然後加上十進制的指數,例如可以使用科學記數法。 1.23e2(其中 值123)。小數點或 指數是必需的(否則, 該數字是一個整數常量)。 C99引入了十六進制的 浮點常量,其遵循 類似的規則,除了它們必須是 前綴爲0x並且使用p來指定 十六進制指數。二進制和 十六進制浮點常量 可能後綴f或F來指示 浮點類型的常量,由l或L指定爲 指示類型爲long double,或者爲左邊的 爲雙常數不指定。

+0

和3.0F是浮點。 – stonemetal 2009-08-31 00:59:53

+0

十進制和十六進制浮點常量都可以後綴f或F來指示float類型的常量,由l或L表示類型爲long double,或者左對於雙常量不帶任何後綴。 =>它的速度太快,無法在這裏得到答案:) – kumar 2009-08-31 01:06:49

10
  • 3.0F是浮動(4個字節)
  • 3.0是雙(8個字節)

more info

6

3.0是一個double,而不是一個float

doubles的寬度是float s的兩倍。

EDIT:3.0D只在C#

+0

沒有'd'浮點後綴('l'和'L'給出長雙倍,'f'和'F'給出浮點和缺少後綴給出雙倍) – AProgrammer 2009-08-31 07:37:57

+0

固定;謝謝。 – SLaks 2009-08-31 11:24:58

+0

在IEEE754中'double'是'float'的兩倍寬;但是C不需要IEEE754。 – 2017-05-04 15:38:25