2011-01-28 44 views
41

我在程序中看到了「1/3.f」,並想知道「.f」是幹什麼用的。所以嘗試了我自己的程序:附加到數字上的「.f」的目的是什麼?

#include<iostream> 
using namespace std; 
int main() 
{ 
     cout<<(float)1/3<<endl; 
     cout<<1/3.f<<endl; 
     cout<<1/3<<endl; 
} 

.f是否使用像一個演員?任何我可以閱讀更多關於這個有趣的語法的地方?

+19

+1用於嘗試自己的程序並建立一個假設。也就是說,你可能想要確保你正在從[書籍](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)學習,這是學習新語言的最佳途徑。 – GManNickG 2011-01-28 12:41:06

+1

該程序的輸出是什麼?我可以自己做,但我認爲這將包括很好 – andrewtweber 2013-09-08 20:51:13

回答

38

沒有.f數被解釋爲一個整數,因此1/3(int)1/(int)3 =>(int)0代替的期望(float)0.333333.f告訴編譯器將該文字解釋爲浮點類型的浮點數。還有其他這樣的構建體,例如0UL,這意味着(unsigned long)0,而簡單的0將是(int)0

.f實際上是兩個部件,這表明字面是浮點數,而不是一個整數,並且f後綴它告訴編譯器字面應float類型,而不是所使用的默認的雙型的.用於浮點文字。

免責聲明;在上面的解釋中使用的「投射構造」不是實際的投射,而是指示文字類型的一種方式。

如果你想知道的一切有關文字和後綴,你可以在其中使用,你可以閱讀C++標準,(1997 draftC++11 draftC++14 draftC++17 draft),或者,看看在一個體面的教科書,如Stroustrup的The C++ Programming Language

順便說一句,在你的榜樣(float)1/3的文字13實際上是整數,但1首先要轉換成浮動你投,隨後3個被隱式轉換爲float,因爲它是一個右手操作的浮點運算符。 (操作符是浮點,因爲它的左操作數是浮點數。)

8

3.f是3.0f的縮寫 - 數字3.0是float類型的浮點數字。

49

3.相當於3.0,這是一個雙。

f下面的數字文字使它成爲一個浮點數。

+3

一個簡單的問題,你是唯一真正回答它的人。 – CashCow 2011-01-28 12:37:06

+3

+ 1爲一個簡單的答案(和你的漂亮的羊化身)。 – Johan 2011-01-28 13:09:01

15

默認情況下3.2被視爲double;所以強制編譯器將其視爲float,最後需要編寫f

剛看到這個有趣的演示:

float a = 3.2; 
if (a == 3.2) 
    cout << "a is equal to 3.2"<<endl; 
else 
    cout << "a is not equal to 3.2"<<endl; 

float b = 3.2f; 
if (b == 3.2f) 
    cout << "b is equal to 3.2f"<<endl; 
else 
    cout << "b is not equal to 3.2f"<<endl; 

輸出:

一個不等於3.2
b等於3。2F

動手和實驗在這裏ideone:http://www.ideone.com/WS1az

嘗試改變從float變量a的類型double,再次看到的結果!

2

小數點和殲有不同的目的,所以它是不是真的.F

你要明白,在C和C++一切類型的,包括文字。

3是一個字面整數。 3.是一個文字雙數 3.f是一個文字浮點數。

一個IEEE浮點數的精度比雙精度低。 float僅使用32位,具有22位尾數和10位指數(包括每個符號位)。

double給你更多的準確性,但有時你不需要這樣的準確性(例如,如果你正在計算的數字只是估計的第一位),並由float給出就足夠了,如果你正在存儲大它們的數量(例如處理大量時間序列數據)可能比精度更重要。

因此float仍然是一個有用的類型。

您不應該將此與printf和等價語句使用的表示方法混淆。

相關問題