[英]Why does this code for incrementing an uint8_t include `& 0xFF`?
在閱讀 Xilinx 的一些 DMA 示例代碼時,我遇到了這段代碼:
value = (value + 1) & 0xFF
其中 value 是 uint8_t。
& 0xFF
什么? 為什么不簡單地寫value = value + 1
?
我的猜測是,即使value
不是1 字節(8 位)類型,這段代碼也能正常工作。 位掩碼0xFF
確保僅保留值的最后一個字節。
當您想避免隱式類型提升的問題時,或者當您只是想證明您在編寫代碼時已經考慮了隱式提升時,這種代碼很常見,這是一種很好的編程習慣。
uint8_t
是一個小的整數類型,因此無論何時在表達式中使用它時,它總是被提升為int
。 (value + 1)
的結果總是int
。
如果沒有屏蔽,一些編譯器會給出警告,例如“試圖在 uint8_t 中存儲 int”。 我在幾個編譯器上遇到過這樣的警告。 理論上int & 0xFF
仍然是一個 int,但由於它的值不能大於 0xFF,編譯器可能能夠將類型優化為 uint8_t 並且警告將消失。
或者你可以寫value = (uint8_t)(value + 1u);
具有相同的含義(但它是代碼的 MISRA-C 兼容版本)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.