〜(uint32_t)是什么意思?

时间:2010-03-17 14:19:50

标签: c syntax

我在OS内核中读了一些C代码,上面写着

x & ~(uint32_t)CST_IEc;

~()是什么意思?这是一个波浪形,后面是括号!

7 个答案:

答案 0 :(得分:19)

~()实际上是两件事:

  1. (uint32_t)是演员。
  2. ~是一个按位补码运算符。

答案 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