close

最近在寫PID的控制,需要用到一些乘除的運算,

在Microchip MCU中的乘,例如說a*100,其實是a加100次,

會多很多程式碼,還要擔心是不是會超出變數的容量,

例如a是宣告unsigned char也就是0~255,

a*100就會超過資料的容量,

如果a是int (16位元)騎時在做乘除運算時需要更多的資料空間與程式碼,

程式碼一多,當然執行的時間也就變長了,在資源有限的MCU中會造成許多的浪費。

一般要節省運算的程式碼與執行時間,會用左移(<<)或右移(>>),

a<<1代表a*2, a<<2代表a*2^2,以此類推.......

相對的a>>1代表a/2,a>>2代表a/(2^2),以此類推......

也就是說不管是乘除就最好用2的次方,這是一些小小的技巧,

唯一要注意的是如果你的變數會有負數,就不要用左移和右移的方式,

因為左移與右怡並不會判斷附號並做處理,會造成資料運算後的錯誤,

一些小心得與大家分享 ^^

 

 

arrow
arrow

    fishark 發表在 痞客邦 留言(0) 人氣()