C++內建算術類型使用選擇技巧

來源:互聯網
上載者:User

首先,我們看看在Java語言中,一個較為經典的問題。

short s = 1;s= s+1;

讀者認為上述程式執行後,s的值是多少?如果稍不注意,我們很容易的得到答案是s的值為2.但是,實際上上述程式根本就不會編譯通過。為什麼呢?

原因是:1)java程式中,關於算術類型進行四則運算時,所有小於int類型的數進行運算時,其結果將轉換為int類型,這是因為在計算時是按照機器字長進行的;2)Java類型轉換非常嚴格,自動轉型只能是從小類型到大類型進行,若反過來必須進行強制轉型,即在前面加上強制轉型運算子,例如,s=(short) (s+1);但如果上述程式是這樣的,short s=1;s+=1;則程式運行後s的值就是2,至於為什麼會這樣,我也希望有哪位讀者可以告訴我,在此先謝。

 

如果你使用過java,你可能知道在Java中的整數預設為int類型,而浮點數預設是double,例如如果你定義float f = 1.0;是無法編譯通過的。我們這裡不是討論Java的這些問題,但有一個問題值得我們去深思,即,為什麼Java有預設的類型,預設的類型為什麼是這些?這就是我們為什麼要說的類型選擇技巧了。

 

那麼,在定義算術類型變數時,到底使用什麼類型比較適合呢?

針對整型,到底使用int?還是short?還是long?當然,在面對具體需要的時候,應該使用具體的類型。我們知道,在電腦中,在某一時刻參加運算的資料是以一個機器字長參與運算的。因此,對於整數而言,將整數設定為int是合理的,int的長度剛好是一個機器字長(比如32位機器)。short類型的資料表示範圍是半個機器字長,如果使用short類型,一不小心可能給short類型變數賦一個超過其範圍的值,這就容易出現“截斷”現象,使得程式執行得到不可預期的結果。對於一個完全可以使用int範圍表示的資料,在那些使用32位表示int用64位表示long的機器上,如果用long類型的執行花費的代價要遠遠高於int類型。而一般情況下,使用int類型足矣滿足日常的運算需要。因此,建議定義整數類型時使用int。

針對浮點類型,使用float、double、還是long double?

float類型雖然是一個機器字長的表示範圍,但是它只能保證6位有效數字,因此,在運算中float類型的隱式精度損失往往是不可忽視的,因此,建議使用double類型,而long double則花費的代價太高,沒有必要用那麼大的精度來儲存通常的數值。

由此可知為什麼Java設計者很聰明的將int、double類型設定為數字常量的預設類別了。

 

對於整型的signed和unsigned到底使用哪種好呢?當然,如果數值有可能是負數,那麼當然要使用signed。但是,有些問題不會涉及到負數的,比如計算大小、元素個數之類的,建議使用unsigned的,這不會有錯的。

至於通常編程時定義的char類型,到底是signed char還是unsigned char呢,例如 char c,那麼c是signed還是unsigned?當程式中定義普通char類型時,不同的編譯系統不同,可能編譯為signed char,也可能unsigned char。

總而言之,在進行編程時,除了程式特別需要,不然,通常情況下使用int來儲存整數,使用double來儲存浮點數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.