我在程序中看到了「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是否使用像一個演員?任何我可以閱讀更多關於這個有趣的語法的地方?
我在程序中看到了「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是否使用像一個演員?任何我可以閱讀更多關於這個有趣的語法的地方?
沒有.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 draft,C++11 draft,C++14 draft,C++17 draft),或者,看看在一個體面的教科書,如Stroustrup的The C++ Programming Language。
順便說一句,在你的榜樣(float)1/3
的文字1
和3
實際上是整數,但1首先要轉換成浮動你投,隨後3個被隱式轉換爲float,因爲它是一個右手操作的浮點運算符。 (操作符是浮點,因爲它的左操作數是浮點數。)
3.f是3.0f的縮寫 - 數字3.0是float類型的浮點數字。
默認情況下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
,再次看到的結果!
小數點和殲有不同的目的,所以它是不是真的.F
你要明白,在C和C++一切類型的,包括文字。
3是一個字面整數。 3.是一個文字雙數 3.f是一個文字浮點數。
一個IEEE浮點數的精度比雙精度低。 float僅使用32位,具有22位尾數和10位指數(包括每個符號位)。
double給你更多的準確性,但有時你不需要這樣的準確性(例如,如果你正在計算的數字只是估計的第一位),並由float給出就足夠了,如果你正在存儲大它們的數量(例如處理大量時間序列數據)可能比精度更重要。
因此float仍然是一個有用的類型。
您不應該將此與printf和等價語句使用的表示方法混淆。
+1用於嘗試自己的程序並建立一個假設。也就是說,你可能想要確保你正在從[書籍](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)學習,這是學習新語言的最佳途徑。 – GManNickG 2011-01-28 12:41:06
該程序的輸出是什麼?我可以自己做,但我認爲這將包括很好 – andrewtweber 2013-09-08 20:51:13