2011-04-04 127 views
8

當我給sizeof(a),其中a=13.33,一個浮點變量,大小是4個字節。 但是,如果我直接給sizeof(13.33),大小是8個字節。爲什麼sizeof(13.33)是8個字節?

我不明白髮生了什麼事。有人可以幫忙嗎?

+13

老兄,停止添加並移除'數學'標籤來將這個問題顛覆到頂部。 – Xeo 2011-04-12 11:49:03

+1

嘗試使用13.ff代替,也請參閱此鏈接 http://stackoverflow.com/questions/2331751/does-the-size-of-an-int-depend-on-the-compiler-and-or-processor – 2013-12-18 08:52:59

+0

[爲什麼浮點值如3.14在MSVC中默認被認爲是雙重](https://stackoverflow.com/q/4353780/995714) – 2017-08-21 09:06:13

回答

44

這些是語言的規則。

13.33是一個數字文字。它被視爲雙重因爲它是雙重的。如果你想把13.33當作浮點數字來處理,那麼你需要聲明13.33f。

13.33是雙字面意思。如果sizeof(float)== 4,sizeof(13.33f)== 4也應該保留,因爲13.33f是一個浮點數字。

19

文字13.33被視爲雙精度浮點值,8字節寬。

+2

要明確地標記一個數字文字作爲單精度浮點數,請嘗試使用'13.33f '。 sizeof(13.33f)'返回預期的4。 – 2011-04-04 10:37:25

13

13.33字面值被視爲'double',而不是'float'。

改爲嘗試13.33f。

8

因爲13.33double,如果分配給它,它會被截斷爲float。而double是8字節。要創建實際的浮動點,請使用13.33f(注意f)。

9

變量的類型和大小都很好。 這只是編譯器有一些文字的默認類型,這些常量值在您的程序中被硬編碼。

如果你要求sizeof(1),你會得到sizeof(int)。如果您要求sizeof(2.5),您將獲得sizeof(double)。那些將分別適合char和float,但編譯器具有文字的默認類型,並將它們視爲直到賦值。

不過,您可以重寫此默認行爲。例如:

2.5 // as you didn't specify anything, the compiler will take it for a double. 
2.5f // ah ha! you're specifying this literal to be float 

乾杯!

相關問題