相关疑难解决方法(0)

是什么 !!(不是)JavaScript中的运算符?

我看到一些代码似乎使用了一个我无法识别的运算符,以两个感叹号的形式出现,如下所示:!!.有人可以告诉我这个运营商的作用吗?

我看到这个的背景是,

this.vertical = vertical !== undefined ? !!vertical : this.vertical;
Run Code Online (Sandbox Code Playgroud)

javascript operators

2906
推荐指数
32
解决办法
51万
查看次数

C++代码中的双重否定

我刚刚进入一个拥有相当庞大代码库的项目.

我主要处理C++,他们编写的很多代码都使用布尔逻辑的双重否定.

 if (!!variable && (!!api.lookup("some-string"))) {
       do_some_stuff();
 }                                   
Run Code Online (Sandbox Code Playgroud)

我知道这些人都是聪明的程序员,很明显他们不会偶然这样做.

我不是经验丰富的C++专家,我唯一猜测他们这样做的原因是他们想要绝对肯定被评估的值是实际的布尔表示.所以他们否定它,然后再次否定它以使其恢复到它的实际布尔值.

这是正确的,还是我错过了什么?

c++ boolean

116
推荐指数
8
解决办法
3万
查看次数

使用if(!!(expr))而不是if(expr)

在阅读德州仪器为其SensorTag提供的示例代码时,我遇到了以下片段.

void SensorTagIO_processCharChangeEvt(uint8_t paramID) { 
    ...

    if (!!(ioValue & IO_DATA_LED1)) {
        PIN_setOutputValue(hGpioPin, Board_LED1, Board_LED_ON);
    } else {
        PIN_setOutputValue(hGpioPin, Board_LED1, Board_LED_OFF);
    }

    if (!!(ioValue & IO_DATA_LED2)) {
        PIN_setOutputValue(hGpioPin, Board_LED2, Board_LED_ON);
    } else {
        PIN_setOutputValue(hGpioPin, Board_LED2, Board_LED_OFF);
    }

    if (!!((ioValue & IO_DATA_BUZZER))) {
        Clock_start(buzzClockHandle);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

声明就像这样(在同一个文件中).

#define IO_DATA_LED1   0x01
static uint8_t ioValue;
Run Code Online (Sandbox Code Playgroud)

是否if (!!(ioValue & IO_DATA_LED1))提供任何优势if (ioValue & IO_DATA_LED1)

c expression

66
推荐指数
3
解决办法
3717
查看次数

为什么用!!(条件)代替(条件)?

我见过人们使用带有两个'!'的条件子句的代码

#define check_bit(var, pos)       (!!((var) & (1 << (pos))))
#define likely(x)       __builtin_expect(!!(x),1)
#define unlikely(x)     __builtin_expect(!!(x),0)
Run Code Online (Sandbox Code Playgroud)

是我能找到的一些例子.

使用!!(condition)结束有什么好处(condition)吗?

c logical-operators

35
推荐指数
2
解决办法
2285
查看次数

什么!! (双感叹号)是什么意思?

在下面的代码中,从Alias博客文章中,我注意到使用双感叹号!!.我想知道这意味着什么以及我将来可以在哪里找到像这样的Perl语法的解释.(是的,我已经!!perlsyn搜索了).

package Foo;

use vars qw{$DEBUG};
BEGIN {
    $DEBUG = 0 unless defined $DEBUG;
}
use constant DEBUG => !! $DEBUG;

sub foo {
    debug('In sub foo') if DEBUG;

    ...
}
Run Code Online (Sandbox Code Playgroud)

更新
感谢您的所有答案.

以下是我刚发现的与List Squash Operator相关其他内容x!!

perl boolean operators negation

34
推荐指数
2
解决办法
1万
查看次数

逻辑否定如何在C中起作用?

我一直在用!(逻辑否定)在C和其他语言中,我很好奇有谁知道如何制作自己的!功能?或者有创造性的方式制作一个?

c

11
推荐指数
3
解决办法
2万
查看次数

从C程序读取标志寄存器

为了好奇,我试图读取标志寄存器并以一种很好的方式将其打印出来.

我已经尝试使用gcc的asm关键字阅读它,但我无法让它工作.任何提示如何做到这一点?我正在运行Intel Core 2 Duo和Mac OS X.以下代码就是我所拥有的.我希望能告诉我是否发生溢出:

#include <stdio.h>

int main (void){
  int a=10, b=0, bold=0;
  printf("%d\n",b);
  while(1){
    a++;
  __asm__ ("pushf\n\t"
   "movl 4(%%esp), %%eax\n\t"
   "movl %%eax , %0\n\t"
   :"=r"(b)      
   :         
   :"%eax"        
   ); 
  if(b!=bold){ 
    printf("register changed \n %d\t to\t %d",bold , b);
  }
  bold = b;
  }
}
Run Code Online (Sandbox Code Playgroud)

这给出了分段错误.当我运行gdb时,我得到了这个:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x000000005fbfee5c
0x0000000100000eaf in main () at asm.c:9
9       asm ("pushf \n\t"
Run Code Online (Sandbox Code Playgroud)

c x86 assembly flags

6
推荐指数
3
解决办法
6350
查看次数