日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机c语言强制数据类型,写单片机程序数据类型相关

發布時間:2024/9/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机c语言强制数据类型,写单片机程序数据类型相关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在調試單片機程序,總是遇到一些開始認為不可思議的事情,后來解決了問題后發現,都是因為自己書寫程序不嚴謹,其主要原因是沒有注意c語言的數據類型的數據范圍。

對有符號、無符號數據的使用存在誤區,對類型轉換理解不到位。下面就舉例一一說明:

1:一個簡單的for循環,但因為數據溢出導致進入死循環,無法實現相應功能。

unsigned char i;

for(i=0;i<256;i++)

語句;

咋看起來這語句沒有什么問題。但仔細考慮發現,i在此循環中會溢出,i的值 0---255---0----255----0-----------。

2:在循環里還需要注意的是有符號數和無符號數進行比較時:

unsigned char i;

i=230;

if(i>-5)

當無符號和有符號數進行比較時,會把無符號數轉換為有符號數,i=230轉換成有符號數是-26 因此if條件不成立。

3:使用printf或sprintf時,注意要打印的數值的數據類型,否則打印出來的不是你需要的。

4:注意在各個函數參數或者其他賦值時的數據類型的默認轉換??紤]清楚的類型不匹配時,和默認類型轉換不符時,可以使用強制類型轉換。

5:昨天調試一個單片機漢字顯示程序時,遇到數據簡單運算結果不對的情況。

uchar ch0,ch1;

uint32offset;

offset=(uint32) (HZ_BASE_ADDR+((((ch0 - 1) * 94) + (ch1 - 1))*32)); 這個語句算出的結果不對,開始不理解,后來發現還是數據類型的問題。原因是ch0是無符號字符類型的,因此((ch0 - 1) * 94) 的結果溢出。導致出錯。修正方案:offset=(uint32) (HZ_BASE_ADDR+((((ch0 - 1) * 94L) + (ch1 - 1))*32L)); 添加強制轉換,把立即數強制為long int型數據,根據c語言默認數據類型提升方案,其他參與運算的數值也轉換為long int型。問題解決。

總結

以上是生活随笔為你收集整理的单片机c语言强制数据类型,写单片机程序数据类型相关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。