Ответ 1
да, это два nots.
!!a
1
, если a
отличен от нуля и 0
, если a
есть 0
Вы можете думать о !!
как о заклинании {0,1}
. Я лично считаю, что использование плохая попытка казаться фантазией.
Я читаю этот код и получаю эту строку
switch (!!up + !!left) {
что такое оператор !!
? два логических НЕ?
да, это два nots.
!!a
1
, если a
отличен от нуля и 0
, если a
есть 0
Вы можете думать о !!
как о заклинании {0,1}
. Я лично считаю, что использование плохая попытка казаться фантазией.
Вы можете представить это так:
!(!(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
!!
является более переносимой (pre-C99) альтернативой (_Bool)
.
Ты прав. Это два не. Чтобы узнать, почему это нужно сделать, попробуйте этот код:
#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.