2010-03-17 75 views

回答

19

~()實際上是兩件事情:

  1. (uint32_t)是一個演員。
  2. ~是一個按位互補運算符。
4

您正在解釋運算符的優先順序錯誤。演員(uint32_t)CST_IEc先完成,然後~發生。查看運營商優先級圖表尋求幫助。

4
  • (uint32_t)位是流延到一個無符號整型(32個比特)的,
  • ~裝置按位不(或補體),所以它逆轉CST_IEc位已經轉換爲uint32_t後。
3
(uint32_t)CST_IEc; //casting CST_IEc to uint32_t 

~() //taking one's complement 
2

不是(uint32_t的)類型轉換?

〜是不是

10

數按位以上括號來clearify評估順序:

(x & (~((uint32_t)CST_IEc))) 

首先CST_IEc被鑄造成一個uint32_t那麼它是按位與~否定被逐位通過&x相與前。

3

您需要閱讀的表達略有不同:

(uint32_t)CST_IEc 

此值CST_IEc轉換成一個32位無符號整數。

~(uint32_t)CST_IEc; 

~然後做一個按位反轉的值;每一位變爲零,每一位變爲一位。然後

整個表達的作用:

x & ~(uint32_t)CST_IEc; 

這意味着該結果包含在除了由CST_IEc值所暗示的位x的比特;那些被歸零。

因此,如果CST_IEc爲例如0x0F00,並且輸入值x爲0x12345678,則結果爲0x12345078。