什么!! (bang bang) 是什么意思?

What does !! (bang bang) mean?

在任何地方都找不到对此的引用——我有以下代码正在尝试使用,任何人都可以告诉我这是什么!!在这种情况下意味着什么?需要明确的是,它是 "bang bang" !!不是 "pipe pipe" ||。提前致谢!

/* Branch prediction */
#ifdef __GNUC__
# define likely(p)     __builtin_expect(!!(p), 1)
# define unlikely(p)   __builtin_expect(!!(p), 0)
# define unreachable() __builtin_unreachable()
#else
# define likely(p)     (!!(p))
# define unlikely(p)   (!!(p))
# define unreachable() ((void)0)
#endif

! 是一个简单的布尔 "Not" 运算。

您可能熟悉它:

if (!x)  // If x is 0, then execute the if-statement.

!! 是其中的两个链接在一起,其效果是采用 any 非零值并将其转换为 1/true,任何零值保持 zero/false


它用于某些需要 1 或 0 值的宏,或者当您想将任意值(指针、双精度、字符等)转换为纯 1 或 0 布尔值时。

! 运算符执行 逻辑 NOT 运算。如果它的操作数是 0 结果是 1,如果操作数是非零结果是 0.

所以 !! 是应用了两次的逻辑 NOT 运算符。那么这是做什么的呢?如果操作数为 0,则内部 ! 将其转换为 1,然后外部 ! 将其转换为 0。如果操作数非零,则内部 ! 将其转换为 0 ,然后外部 ! 将其转换为 1.

因此 !! 将一个值转换为它的布尔值等价物。如果值为0,则保持为0,否则变为1。