![]() |
發布時間: 2020-3-16 14:42
正文摘要:這行代碼的目的是將CAN報文接收 把兩個byte(字節數) 合并成一個 16bit 的數,之后再運算的 Obj->VehicleCan.ICAN4022_currents4 = (((Currents4_H | VehicleCanRecData.CanBytes.Byte2))- 327 ... |
vvyywy 發表于 2020-3-16 16:42 感謝!您說的方法我理解了,先乘后除,這樣整個過程不會出現小數(浮點類型),不過實現起來算法不對,我再研究一下 ![]() |
(((((Currents4_H | VehicleCanRecData.CanBytes.Byte2))- 32767)*200)>>15)/200 |
int型數據 確實可以用移位運算表示2 4 8 之類的乘除法。但是對于其他數據如float 就不太行了。16.3835 這個常數,在編譯器里,默認是double型的,后面加個f,可變為float型。速度會優化不少。 |