999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

嵌入式C 語言數(shù)據(jù)類型轉(zhuǎn)換淺析

2020-11-24 20:47:07張正宜杜秋來新余學(xué)院
數(shù)碼世界 2020年1期
關(guān)鍵詞:嵌入式語言

張正宜 杜秋來 新余學(xué)院

一、引言

嵌入式微處理器技術(shù)發(fā)展迅速,采用更高效的編程語言已成為嵌入式系統(tǒng)開發(fā)者的必然選擇。而C 語言作為為數(shù)不多的同時具備高級語言和低級語言優(yōu)良性能,可以直接控制硬件的高級語言之一,得到了大多數(shù)程序員的青睞,而且C 語言作為計算機(jī)相關(guān)專業(yè)及許多非計算機(jī)專業(yè)的入門編程語言,有非常好的群眾基礎(chǔ)。嵌入式C 語言就是在C 語言的基礎(chǔ)上,針對硬件系統(tǒng)進(jìn)行優(yōu)化,特別是數(shù)據(jù)類型及數(shù)據(jù)存儲和訪問機(jī)制。區(qū)別在于使用時考慮的角度不同及習(xí)慣不同,如嵌入式C 語言開發(fā)會更在乎效率和內(nèi)存有效使用等。

二、嵌入式C 語言數(shù)據(jù)類型

數(shù)據(jù)類型在數(shù)據(jù)結(jié)構(gòu)中的定義是一個值的集合以及定義在這個值集上的一組操作。C 語言是一種“強(qiáng)類型”編程語言,即C 語言中每一種數(shù)據(jù)都有特定的數(shù)據(jù)類型,并且在程序編譯過程中要對每個常量和變量的數(shù)據(jù)類型進(jìn)行檢查,不一致會報錯。

嵌入式C 要對不同的處理器編程,因此它的數(shù)據(jù)類型比較復(fù)雜,與所編程的對象處理器直接相關(guān),不同的處理器,會擴(kuò)充新的數(shù)據(jù)類型。類型復(fù)雜的數(shù)據(jù),使用起來靈活多變,經(jīng)常要進(jìn)行類型間的相互轉(zhuǎn)換,給初學(xué)者的使用造成較大麻煩,且容易出錯。本文針對上述問題,對嵌入式C 語言中算術(shù)類型轉(zhuǎn)換、賦值類型轉(zhuǎn)換、強(qiáng)制類型轉(zhuǎn)換這三種常見的基本數(shù)據(jù)類型轉(zhuǎn)換進(jìn)行深入的探討和歸納,同時對三種類型轉(zhuǎn)換進(jìn)行總結(jié)對比,并通過典型程序舉例分析了在編程中的實(shí)際應(yīng)用。

三、嵌入式C 語言數(shù)據(jù)類型轉(zhuǎn)換機(jī)制

(一)自動類型轉(zhuǎn)換

自動類型轉(zhuǎn)換就是編譯器隱形進(jìn)行的數(shù)據(jù)類型轉(zhuǎn)換,這種轉(zhuǎn)換不需要程序員干預(yù),會自動發(fā)生。在有多種數(shù)據(jù)類型混合計算的時候,若未人為控制類型,系統(tǒng)會自動進(jìn)行類型轉(zhuǎn)換。

1、將一種類型的數(shù)據(jù)賦值給另外一種類型的變量時就會發(fā)生自動類型轉(zhuǎn)換,例如:float f = 100;100 是 int 類型的數(shù)據(jù),需要先轉(zhuǎn)換為float 類型才能賦值給變量 f。在賦值運(yùn)算中,賦值號兩邊的數(shù)據(jù)類型不同時,需要把右邊表達(dá)式的類型轉(zhuǎn)換為左邊變量的類型,這可能會導(dǎo)致數(shù)據(jù)失真,或者精度降低;所以說,自動類型轉(zhuǎn)換并不一定是安全的。對于不安全的類型轉(zhuǎn)換,編譯器一般會給出警告。

2、在不同類型的混合運(yùn)算中,編譯器也會自動地轉(zhuǎn)換數(shù)據(jù)類型,將參與運(yùn)算的所有數(shù)據(jù)先轉(zhuǎn)換為同一種類型,然后再進(jìn)行計算。轉(zhuǎn)換的規(guī)則如下:

轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進(jìn)行,以保證數(shù)值不失真,或者精度不降低。例如,int 和long 參與運(yùn)算時,先把int 類型的數(shù)據(jù)轉(zhuǎn)成long 類型后再進(jìn)行運(yùn)算。所有的浮點(diǎn)運(yùn)算都是以雙精度進(jìn)行的,即使運(yùn)算中只有float 類型,也要先轉(zhuǎn)換為double 類型,才能進(jìn)行運(yùn)算。

自動類型轉(zhuǎn)換示例:

#include

int main(){

float PI = 3.14159;

int s1, r = 5;

double s2;

s1 = r * r * PI;

s2 = r * r * PI;

printf("s1=%d, s2=%f ", s1, s2);

return 0;

}

運(yùn)行結(jié)果:s1=78, s2=78.539749。在計算表達(dá)式r*r*PI 時,r和 PI 都被轉(zhuǎn)換成 double 類型,表達(dá)式的結(jié)果也是double 類型。但由于s1 為整型,所以賦值運(yùn)算的結(jié)果仍為整型,舍去了小數(shù)部分,導(dǎo)致數(shù)據(jù)失真。

(二)賦值轉(zhuǎn)換

如果賦值運(yùn)算符兩側(cè)數(shù)據(jù)類型不一致,則在賦值時會發(fā)生賦值類型轉(zhuǎn)換。

1、int 型與float 型

將float 類型賦值給int 型時,會舍去小數(shù)部分。

如:int a = 3.5;//此時a 的值是3

將int 類型賦值給float 型時,數(shù)值會以float 類型存儲。

如:float f = 4;//此時f 的值是4.0

2、float 型與double 型

將double 型賦值給float 型時,截取7 位有效數(shù)字存儲在float類型中。但要注意不要超過float 類型的存儲范圍(因?yàn)閐ouble 類型存儲范圍比float 類型大)

3、char 型與int 型

將int類型賦值給char類型時,直接截取低8位存儲在char型中。

將char 類型賦值給int 類型時,分兩種情況:

⑴無符號char 類型(即unsigned char 型),數(shù)據(jù)存儲在int類型低8 位,剩下24 位補(bǔ)0;

⑵有符號char 類型,數(shù)據(jù)存儲在int 型低8 位。若char 首位是0,則int 型剩下24 位補(bǔ)0;若char 首位是1,則int 型剩下24 位補(bǔ)1;

(三)強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換

自動類型轉(zhuǎn)換是編譯器根據(jù)代碼的上下文環(huán)境自行判斷的結(jié)果,不能滿足所有的需求,程序員可以自己在代碼中明確地提出要進(jìn)行類型轉(zhuǎn)換,稱為強(qiáng)制類型轉(zhuǎn)換。

強(qiáng)制類型轉(zhuǎn)換的格式為:

(type_name) expression

type_name 為新類型名稱,expression 為表達(dá)式。

下面是一個需要強(qiáng)制類型轉(zhuǎn)換的經(jīng)典例子:

1.#include

2.int main(){

3.int sum = 103; //總數(shù)

4.int count = 7; //數(shù)目

5.double average; //平均數(shù)

6. average = (double) sum / count;

7.printf("Average is %lf! ", average);

8.return 0;

9.}

運(yùn)行結(jié)果:Average is 14.714286!

sum 和count 都是 int 類型,如果不進(jìn)行干預(yù),則sum/count的運(yùn)算結(jié)果也是int 類型,小數(shù)部分將被丟棄;雖然是average 是double 類型,可以接收小數(shù)部分,但是小數(shù)部分提前就被“閹割”了,只能接收到整數(shù)部分,導(dǎo)致除法運(yùn)算的結(jié)果嚴(yán)重失真。為了提高運(yùn)算結(jié)果的精度呢,程序員只要將sum 或者count 其中之一轉(zhuǎn)換為double 類型即可。

類型轉(zhuǎn)換只是臨時性的,無論是自動類型轉(zhuǎn)換還是強(qiáng)制類型轉(zhuǎn)換,都只是為了本次運(yùn)算而進(jìn)行的臨時性轉(zhuǎn)換,轉(zhuǎn)換的結(jié)果也會保存到臨時的內(nèi)存空間,不會改變數(shù)據(jù)本來的類型或者值。

(四)自動類型轉(zhuǎn)換VS 強(qiáng)制類型轉(zhuǎn)換

在C 語言中,有些類型既可以自動轉(zhuǎn)換,也可以強(qiáng)制轉(zhuǎn)換,例如int 到 double,float 到 int 等;而有些類型只能強(qiáng)制轉(zhuǎn)換,不能自動轉(zhuǎn)換,例如以后將要學(xué)到的 void * 到 int *,int 到 char * 等??梢宰詣愚D(zhuǎn)換的類型一定能夠強(qiáng)制轉(zhuǎn)換,但是,需要強(qiáng)制轉(zhuǎn)換的類型不一定能夠自動轉(zhuǎn)換。

可以自動進(jìn)行的類型轉(zhuǎn)換一般風(fēng)險較低,不會對程序帶來嚴(yán)重的后果,例如,int 到 double 沒有什么缺點(diǎn),float 到 int 存在數(shù)值失真。

四、小結(jié)

本文從嵌入式C 語言的數(shù)據(jù)類型的復(fù)雜性及重要性引入,通過數(shù)據(jù)類型基本概念,主要闡述了嵌入式C 語言中算術(shù)類型轉(zhuǎn)換、賦值類型轉(zhuǎn)換、強(qiáng)制類型轉(zhuǎn)換的規(guī)則、格式及典型應(yīng)用,并對自動類型轉(zhuǎn)換與強(qiáng)制類型轉(zhuǎn)換進(jìn)行了比較,對存在的風(fēng)險進(jìn)行了分析。

猜你喜歡
嵌入式語言
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
TS系列紅外傳感器在嵌入式控制系統(tǒng)中的應(yīng)用
電子制作(2019年7期)2019-04-25 13:17:14
嵌入式系統(tǒng)通信技術(shù)的應(yīng)用
電子制作(2018年18期)2018-11-14 01:48:16
搭建基于Qt的嵌入式開發(fā)平臺
讓語言描寫搖曳多姿
多向度交往對語言磨蝕的補(bǔ)正之道
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
累積動態(tài)分析下的同聲傳譯語言壓縮
我有我語言
Altera加入嵌入式視覺聯(lián)盟
主站蜘蛛池模板: 国产精品永久在线| 日韩少妇激情一区二区| 色婷婷狠狠干| 综合天天色| 99热这里只有精品5| 国产成人亚洲欧美激情| 精品撒尿视频一区二区三区| 国产99热| 亚洲人成网站色7777| 欧美精品黑人粗大| 中字无码精油按摩中出视频| 一级毛片免费高清视频| 亚洲无码A视频在线| 亚洲美女一区| 国产亚洲精品无码专| 在线视频亚洲欧美| 亚洲午夜国产精品无卡| 日本亚洲成高清一区二区三区| 三上悠亚在线精品二区| 国产高清免费午夜在线视频| 国产欧美精品一区二区 | 精品国产aⅴ一区二区三区| 成人福利在线看| 91久久偷偷做嫩草影院免费看 | 国产亚洲欧美日韩在线观看一区二区| 欧美日韩激情| 国产精品嫩草影院视频| 午夜福利无码一区二区| 国产成人亚洲欧美激情| 精品欧美日韩国产日漫一区不卡| 中文字幕人成人乱码亚洲电影| 无码免费试看| 国产一区二区色淫影院| 999国内精品视频免费| 青青青视频免费一区二区| 少妇极品熟妇人妻专区视频| 亚洲男人天堂网址| 超清无码熟妇人妻AV在线绿巨人| 亚洲精品黄| 婷婷色婷婷| AV无码国产在线看岛国岛| 日韩在线视频网站| 久久无码免费束人妻| 亚洲视频影院| 国产青榴视频| 国产国模一区二区三区四区| 国产亚洲现在一区二区中文| 超级碰免费视频91| 婷婷99视频精品全部在线观看 | 日本在线亚洲| 国产精品永久在线| 亚洲国产精品无码久久一线| 日韩成人免费网站| 动漫精品啪啪一区二区三区| a级毛片免费看| 国产综合亚洲欧洲区精品无码| 2022国产91精品久久久久久| 欧美一级色视频| 国产精品九九视频| 人妻丰满熟妇αv无码| 午夜不卡福利| 久久国产成人精品国产成人亚洲| 在线另类稀缺国产呦| 99精品久久精品| 国产视频你懂得| 亚洲成人免费在线| 99热这里只有精品2| 91麻豆国产视频| 一区二区自拍| 亚洲一区二区三区国产精华液| 香蕉精品在线| 亚洲无码视频喷水| 欧美一区二区三区欧美日韩亚洲 | 9丨情侣偷在线精品国产| 精久久久久无码区中文字幕| 亚洲电影天堂在线国语对白| 91网址在线播放| 亚洲开心婷婷中文字幕| 精品欧美日韩国产日漫一区不卡| 精品精品国产高清A毛片| 91福利免费视频| 欧美激情福利|