簡體   English   中英

為什么這段用於增加 uint8_t 的代碼包含 `& 0xFF`?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM