天天看點

[Constant]C中常數字尾的使用

問題描述:C/C++程式許多時候會看到一個常數後面會跟一個字尾說明,比如UL。常數字尾許多時候不用也不會有問題,隻要考慮常數賦給變量時不溢出,因為變量進行計算時會将常數轉換成自己的類型。但是有時候就是因為常數沒有指定類型,而且數值很小(比如2)不會有溢出問題,也會産生很隐蔽的bug。比如有次将編譯器選項的優化項選擇為最高(那樣源代碼編譯後生成的二進制檔案會最小),在使用printf函數在LCD屏輸出常數2時就出現了問題,輸出的這個數字會不斷改變,然後将該常數類型用字尾限定後,就一切正常了。是以在使用的編譯器不是那麼聰明,或者将編譯器選項按照自己要求進行了修改後,程式中許多地方都要嚴格的進行書寫。因為常數字尾在許多時候的關鍵作用,于是搜集資料進行了整理與學習。

數的進制:二進制數,八進制數(O),十進制數,十六進制數(0x)。程式中十進制數和十六進制數最為常見,八進制數很少見,二進制數隻是一種表示(程式中并不能直接書寫)。

整數常數字尾:u或U(unsigned)、l或L(long)、u/U與l/L的組合(如:ul、lu、Lu等),u和l沒有順序差別。例:100u;-123u; 0x123l。