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