在進行單片機編程時,咱們常常用Int定義變量。之前學C語言時,我知道int它表示的位數跟具體的硬件結構有關。不過看了一本書中「慎用int」這節後,我對int又有了更一步的認識。編程
原來C語言並無進一步明確不一樣硬件平臺下int位寬由硬件平臺決定這一點,從而致使了對int不一樣的理解。實際上int並無具體的位寬限制,是由所用硬件平臺(MCU)和編譯器共同決定位寬爲多少,一般狀況下編譯器會將int的位寬定爲與所用MCU的位寬一致。spa
文中也舉了兩個例子說明由於對int理解的不夠深刻而犯的錯誤。一個是由於將int誤理解爲32位,而編譯器和MCU爲16位寬。一個產品須要顯示開機後的時間,顯示精度爲秒。若是按照int爲32位的話,定義secondCount爲unsigned int的話,這是確定能知足要求的。但當int被編譯器按照16位來處理的話,最大記錄的時間只能差不到18小時,產品用到正常上班時段是正常的。若是開機時間長的話,好久才關機一次,那麼這個產品就會有問題了。另一個例子是若是開始一款32位MCU作的產品,後來發現一款16位的MCU能夠替代,這時要進行代碼的移植。但16位MCU編譯器認爲int爲16位,這是就存在溢出的問題。若是把int替換爲long,可能把其餘的地方也改動錯誤。編譯器
其實有解決的辦法,C語言它自己提供了更爲精確的數據類型。char,short,long long 分別嚴格對應8位,16位,32位,64位。絕大多數編譯器編譯出來的結果都知足這種對應關係。產品
最後,文中給出一個建議,用C語言編程的時候,必定要謹慎使用int,最好是不用。it
參考《刪繁就簡——單片機入門到精通》編譯
天天進步一點。入門