[英]What does ~(uint32_t) mean?
我在OS內核中讀到了一些C代碼
x & ~(uint32_t)CST_IEc;
~()
是什么意思? 這是一個代字號,后面是括號!
~()
實際上是兩件事:
(uint32_t)
是演員。 ~
是一個按位補碼運算符。 還有一些用於清除評估順序的parantheses:
(x & (~((uint32_t)CST_IEc)))
首先將CST_IEc
轉換為uint32_t
然后在用x
通過&
進行按位求解之前用~
按位取反。
您正在錯誤地解釋運算符優先級。 演員(uint32_t)CST_IEc
完成(uint32_t)CST_IEc
然后發生~
。 查看運算符優先級圖表以獲取幫助。
(uint32_t)
位是對無符號int(32位)類型的強制轉換, ~
表示按位不(或補碼),因此它在CST_IEc
為uint32_t
CST_IEc
的位反轉。 (uint32_t)CST_IEc; //casting CST_IEc to uint32_t
~( ) //taking one's complement
您需要略微區別地閱讀表達式:
(uint32_t)CST_IEc
這會將值CST_IEc
轉換為32位無符號整數。
~(uint32_t)CST_IEc;
~
然后對值進行逐位反轉; 每一位變為零,每個零位變為一位。
整個表達式然后:
x & ~(uint32_t)CST_IEc;
這意味着結果包含x
中的位,除了CST_IEc
的值所隱含的位; 那些都歸零了。
所以,如果CST_IEc
為例如起見,0x0F00,和的輸入值x
是0×12345678,則結果將是0x12345078。
是不是(uint32_t)類型演員?
〜是按位不是
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.