Причины использования & ldquo; !! & rdquo; оператор в C [дубликат]

def flatten(alist):
    if alist == []:
        return []
    elif type(alist) is not list:
        return [alist]
    else:
        return flatten(alist[0]) + flatten(alist[1:])
21
задан JuanPablo 25 April 2012 в 00:12
поделиться

4 ответа

да, это два nots.

!!a является 1, если a отличен от нуля, а 0, если a - 0

Вы можете думать о !! как зажим как бы {0,1}. Я лично считаю, что использование плохая попытка казаться фантазией.

32
ответ дан Armen Tsirunyan 27 August 2018 в 11:09
поделиться

!! является более переносной (pre-C99) альтернативой (_Bool).

5
ответ дан R.. 27 August 2018 в 11:09
поделиться

Вы можете представить это так:

!(!(a))

Если вы делаете это шаг за шагом, это имеет смысл

result = !42;    //Result = 0
result = !(!42)  //Result = 1 because !0 = 1  

. Это вернет 1 с любым номером (-42, 4.2f и т. Д.), Но только с 0, это произойдет

result = !0;    //Result = 1
result = !(!0)  //result = 0
6
ответ дан Rodrigo 27 August 2018 в 11:09
поделиться

Ты прав. Это две ноты. Чтобы узнать, почему это можно сделать, попробуйте этот код:

#include <stdio.h>

int foo(const int a)
{
    return !!a;
}

int main()
{
    const int b = foo(7);
    printf(
        "The boolean value is %d, "
        "where 1 means true and 0 means false.\n",
        b
    );
    return 0;
}

Он выдает The boolean value is 1, where 1 means true and 0 means false. Если вы уроните !!, он выдает The boolean value is 7, where 1 means true and 0 means false.

3
ответ дан thb 27 August 2018 в 11:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: