Как работает логическое отрицание в C?

Я использую! (логическое отрицание) в C и на других языках, мне любопытно, кто-нибудь знает, как сделать свой собственный! функционировать? или создать творческий способ сделать это?

Ответ 1

int my_negate(int x)
{
    return x == 0 ? 1 : 0;
}

Ответ 2

!e можно заменить на ((e)?0:1)

Ответ 3

Вспомните оператор bang '!' или восклицательный знак на английском языке, встроен в язык программирования как средство для отрицания.

Рассмотрим пример троичного оператора:

(some condition) ? true : false;

Теперь, если это было отрицательно, троичным оператором будет этот

(some condition) ? false : true;

Общая область, где это может получить некоторые программисты в бит подгонки, - это функция strcmp, которая возвращает 0 для строк одинаковыми, а 1 для двух строк не одинакова:

if (strcmp(foo, "foo")){

}

Когда это действительно так:

if (!strcmp(foo, "foo")){
}

В общем случае, когда вы отрицаете, это противоположно, как показано в примере тройного оператора...

Надеюсь, что это поможет.

Ответ 4

C рассматривает все ненулевые значения "true" и "false". Логическое отрицание выполняется путем проверки на нуль. Если входной сигнал равен нулю, выведите ненулевое значение; в противном случае - нулевой вывод. В коде вы можете записать это как (input == 0) ? 1 : 0 (или вы можете преобразовать его в оператор if).

Когда вы спрашиваете, как "сделать свой собственный! метод", вы имеете в виду, что хотите написать функцию, которая отрицает логическое значение или вы хотите определить, что делает оператор восклицательной точки? Если первое, то выражение, которое я написал выше, должно быть достаточно. Если последнее, то я боюсь, что это то, чего нельзя сделать в C. С++ поддерживает перегрузку оператора, и если это будет строгого требования, я бы предложил посмотреть там.

Ответ 5

Если вы хотите перегрузить оператор, подходящим прототипом является

bool operator!();

Я не большой поклонник перегрузок операторов, но некоторым людям нравится их синтаксический сахар. EDIT: Это только С++! Поместите его в определение вашего класса.