新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > c語言數(shù)據(jù)運(yùn)算超范圍要注意

c語言數(shù)據(jù)運(yùn)算超范圍要注意

作者: 時(shí)間:2012-08-31 來源:網(wǎng)絡(luò) 收藏

注意:計(jì)算式,能不寫成一大行的就分開寫,只要保證了精度就可以了??!寫一大行有時(shí)候反而影響精度!

例如:unsigned long int X;

double AD;

AD=AD/50.0;

X=AD*5000.0000/1023.00;

最好先局部計(jì)算一下,X=AD*100/1023.00;

1.浮點(diǎn)類型的不能做“?!边\(yùn)算。 例如:float a=1234.56; a=a%10; 這是錯(cuò)誤的。只有整形才能做“?!眎nt a=12345; a=a%10;

2.如果你想做普通的四則運(yùn)算。那肯定是浮點(diǎn)數(shù)的運(yùn)算。整形的除法不是我們平時(shí)的除法,它是舍去了余數(shù),即小數(shù)部分。例如:int a=1; a=a/10; 結(jié)果會(huì)得到0;因?yàn)橹挥猩瘫槐A粝聛?。正確的是: float a=1; a=a/10; 得到結(jié)果是:0.1

3.四則運(yùn)算中常量之間做除法是特別注意:要加小數(shù)部分,不管它有沒有小數(shù)部分;例如:float a; a=12/36; 這是錯(cuò)誤的,只能得到0。正確的應(yīng)該是:float a; a=12.0/36.0; 加上小數(shù)點(diǎn)就對(duì)了,得到結(jié)果 0.3 。不過,賦值運(yùn)算符右邊只要有一個(gè)變量或常量是浮點(diǎn)型就可以了。即:a=12.0/36; 也得到a=0.3;因?yàn)镃語言能自動(dòng)想高一級(jí)轉(zhuǎn)換類型。但是注意:int 與浮點(diǎn)“常量”做運(yùn)算并不能把他的范圍擴(kuò)大,除非計(jì)算式里有浮點(diǎn)“變量”例如:int a=5,llong int b; b=a*3.0+65536;是錯(cuò)誤的,第二次加法還是會(huì)(int )。平時(shí)我們應(yīng)該養(yǎng)成浮點(diǎn)數(shù)加小數(shù)點(diǎn)的習(xí)慣。同時(shí)注意:常量也分?jǐn)?shù)據(jù)類型的。 “12”代表是非浮點(diǎn)型(整型int或字符型char)“12.0”則是浮點(diǎn)型(float)

4. 對(duì)于不同類型的變量做計(jì)算時(shí),要考慮計(jì)算的每一步的值否超過了變量類型的范圍。注意:是每一步的計(jì)算結(jié)果,不單是最終結(jié)果。否則會(huì)出錯(cuò),帶來不必要的麻煩。 例如 unsigned int a,b=7; a=b+65536;得到的結(jié)果不會(huì)是65543,因?yàn)樗呀?jīng)超出了a的最大值 65536; 又如 a=b-65536;也不會(huì)得到負(fù)數(shù). a=b*65536;也超出范圍。a=b/65536.0;也不會(huì)得到小數(shù)。對(duì)于多次計(jì)算更要特別注意,每一部分是否有可能超出范圍,對(duì)超出范圍的做相應(yīng)處理。例如:unsinged int a,b=123; a=b*5000.0/1000000.0; 這樣得到的結(jié)果不會(huì)是你想要的,因?yàn)榈谝淮纬朔ㄒ呀?jīng)超出了范圍,第二次做除法時(shí)要使用的上次結(jié)果已經(jīng)是個(gè)錯(cuò)誤的值了。 可見:四則運(yùn)算要注意三點(diǎn)。1。數(shù)據(jù)類型。2.。精度問題 。 3。計(jì)算問題。 特別是變量與常量的四則運(yùn)算加倍注意是否。

萬能遙控器相關(guān)文章:萬能遙控器代碼


c語言相關(guān)文章:c語言教程




評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉