我在OS内核中读了一些C代码,上面写着
x & ~(uint32_t)CST_IEc;
~()
是什么意思?这是一个波浪形,后面是括号!
答案 0 :(得分:19)
~()
实际上是两件事:
(uint32_t)
是演员。~
是一个按位补码运算符。答案 1 :(得分:10)
澄清评估顺序的一些括号:
(x & (~((uint32_t)CST_IEc)))
首先将CST_IEc
投放到uint32_t
,然后使用~
逐位取消,然后通过x
进行逐位求{。}}。
答案 2 :(得分:4)
您正在正确解释运算符优先级。演员(uint32_t)CST_IEc
首先完成,~
在此之后发生。请查看运算符优先级图表以获取帮助。
答案 3 :(得分:4)
(uint32_t)
位是对无符号整数(32位)~
表示按位而非(或补码),因此它会在CST_IEc
转换为uint32_t
之后将其反转。答案 4 :(得分:3)
(uint32_t)CST_IEc; //casting CST_IEc to uint32_t
~( ) //taking one's complement
答案 5 :(得分:3)
您需要略微区别地阅读表达式:
(uint32_t)CST_IEc
这会将值CST_IEc
转换为32位无符号整数。
~(uint32_t)CST_IEc;
~
然后对值进行逐位反转;每一位变为零,每个零位变为一位。
然后整个表达式:
x & ~(uint32_t)CST_IEc;
这意味着结果包含x
中的位,但CST_IEc
的值隐含的位除外;那些都是零。
因此,如果CST_IEc
为例如0x0F00,且x
的输入值为0x12345678,则结果为0x12345078。
答案 6 :(得分:2)
(uint32_t)不是类型转换吗?
〜是按位NOT