什么!! (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。
在任何地方都找不到对此的引用——我有以下代码正在尝试使用,任何人都可以告诉我这是什么!!在这种情况下意味着什么?需要明确的是,它是 "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。