国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 2013|回復: 0
打印 上一主題 下一主題

C語言編程容易混淆的幾個問題總結(轉)

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2017-8-24 11:49:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在進行單片機開發時,經常都會出現一些很不起眼的問題,這些問題其實都是很基礎的c語言知識點,是一些小細節。但是正是因為很基礎,又都是小細節,所以我們往往容易忽視它們。結果有時候我們會花很長的時間糾結一個問題,遲遲找不到問題的所在。當發現原因竟然是這么的簡單和不起眼時,我想大家都會感到痛不欲生。筆者今天又碰到了這樣的問題,實在忍不住了。因為這些問題都是小的知識點,考慮到之前也遇到好多這種問題,于是決定每次遇到問題就記錄下來,時刻提醒自己!!
1. !和~不一樣
! :邏輯非符號;
~:是位取反符號;
對IO口某個管腳賦值時不要錯用 !,如

1. <<和>>的優先級低于+、-
比如要實現c=x*2+1,沒有加括號會出錯
        
3. 移位要防止溢出
其實用移位代替乘除法是個不錯的方法,筆者很喜歡拿到一段代碼后用移位代替乘除法來進行優化。不過有時候卻會出現問題,比如溢出問題。當很明顯可能溢出的話我們是會注意的,比如

但是有時候這個問題是不明顯的,比如當移位出現在數組索引或函數參數時,有段用液晶顯示字符的代碼如下

我們可以用左移運算來代替乘法進行優化,如

這本是一個好方法,但是事實上上面的代碼是錯的。當執行c<<4時,因為沒有明顯的賦值過程,我們可能認為沒問題,而事實上c的高位已經丟失了,所以得到錯誤的結果。一個可行的做法是先進行強制轉換,如

4. 無符號和有符號運算
當一個有符號數和一個無符號數進行算術運算時,系統會自動將有符號數強制轉換為無符號數再進行運算(即使你使用有符號數強制類型轉換),如下面兩種寫法的運輸結果是一樣的信盈達嵌入式企鵝要妖氣嗚嗚吧久零就要。


5. 局部變量要初始化
這一點是比較容易被忽略的。局部變量沒有初始化的話,因為單片機每次為他分配的是同一個內存區域,當你在函數中是這么使用局部變量時,就可能出問題:

如果第一次調用fun時,a傳遞的值為0,那么flag = 0x01;
執行if(flag&0x01)后面的代碼。以后再調用fun時,即使a不為0,但flag依然使用之前的內存區域,所以其值一直為0x01,一直執行的是if后面的代碼,而不是else后面的


本文轉自網絡


深圳市菲利盟電子技術有限公司
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产三级视频在线 | 久久高清免费视频 | 婷婷涩涩 | 久久国产精品久久 | 鬼片大全恐怖片免费 | 五月天中文网 | 99热这里| 青青国产成人久久91 | eeuss影院在线观看第一页 | 久久久国产免费影院 | 碰操| 国产91在线看 | 欧美成在线播放 | 韩国欧洲一级毛片 | 毛片区| 91传媒蜜桃香蕉在线观看 | 国产一区亚洲二区三区 | 国产精品国产三级国产普通话 | 91九色在线播放 | 日本精品久久久久中文字幕8 | 国产精品东方伊甸园 | 深夜在线看片 | 亚洲综合色婷婷在线观看 | 久久国产欧美日韩精品免费 | 色偷偷91久久综合噜噜噜 | 欧美日韩中文字幕一区二区高清 | 99热手机在线观看 | 99在线资源 | 亚洲欧美成人网 | 91热视频在线 | 不卡在线播放 | 含羞草app| 亚洲毛片免费在线观看 | 特级做a爰片毛片免费看 | 精品国产高清露脸在线观看 | 亚洲欧美中日韩中文字幕 | 天天摸夜夜| 精品国产成人三级在线观看 | 国产精品揄拍一区二区 | 美女教师穿蕾丝内裤动态图 | avtt手机天堂网 |