以下宏來自微控制器的 MCAL 源,它將定時器滴答轉換為毫秒。
#define TICKS2MS(x) ( (uint64) (((((uint64)(x)) * 1) 0) / 100000) )
你能幫我理解乘1加0的意義嗎?
uj5u.com熱心網友回復:
乘法和加法實際上是沒有意義的,外部演員也是如此。
兩個運算子都對兩個運算元執行通常的算術轉換。
對于乘法,左運算元具有 type uint64(作為強制轉換的結果),右運算元具有 type int。由于uint64是較大的型別,它將是結果的型別。運算元1不會因轉換而改變值,因此在乘以1結果時具有與 相同的型別和值(uint64)(x)。
類似地,對于加法,運算元分別是和型別uint64,int意味著結果型別是uint64,并且0在轉換后不會改變值。因此,通過添加 0,結果具有與 具有相同型別和值(uint64)(x) * 1的相同型別和值(uint64)(x)。
最后的強制轉換也是多余的,因為強制轉換的運算式已經有 type uint64。如上所述,除法運算子對其運算元執行通常的算術轉換,因此 a 除以 auint64結果int為 a uint64。
所以上面的宏等價于:
#define TICKS2MS(x) ((uint64)(x) / 100000)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/417150.html
標籤:
