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