【问题标题】:What does !! (bang bang) mean? [duplicate]什么!! (砰砰)是什么意思? [复制]
【发布时间】:2020-07-31 02:19:06
【问题描述】:

在任何地方都找不到对此的引用——我正在尝试使用以下代码,任何人都可以告诉我!!在这种情况下意味着什么?只是为了清楚这是“砰砰”!不是“管道”||。提前致谢!

/* 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

【问题讨论】:

  • !!(expression) 将表达式(假设非空)转换为 01: !!3.14159 ==> 1; !!sqrt(0) ==> 0; !!true ==> 1; !!false ==> 0
  • 问问自己!(!(p)) 是什么意思——同样的事情。 Example
  • 这能回答你的问题吗? What is "!!" in C?
  • 非常感谢 - 为重复道歉。

标签: c logical-operators negation


【解决方案1】:

! 是一个简单的布尔“非”操作。

你可能对它很熟悉:

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

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


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

【讨论】:

  • "任何零值都保持为零/假" --> true,但它的类型可能会改变。例如。 !!(-0.0) 变为 (int) 0
  • 感谢所有回复的人——非常感谢!
【解决方案2】:

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

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

所以!! 将一个值转换为其等效的布尔值。如果值为0,则保持为0,否则为1。

【讨论】:

    猜你喜欢
    • 2012-05-25
    • 2018-04-10
    • 1970-01-01
    • 2020-10-27
    • 2015-07-15
    • 2018-07-17
    • 2012-08-13
    • 2011-12-23
    • 2013-10-27
    相关资源
    最近更新 更多