оператор - 2 восклицательных знака
От: ChistovSE  
Дата: 05.08.10 18:29
Оценка: :)
Что означает двойной отрицательный знак в исходном коде:

static inline void input_report_key(struct input_dev *dev, unsigned int code, int value)
{
input_event(dev, EV_KEY, code, !!value);
}
-------------------------
Сергей Ч.
Нижний Новгород
Re: ни ни!!!
От: Erop Россия  
Дата: 05.08.10 18:32
Оценка: 2 (1)
Здравствуйте, ChistovSE, Вы писали:

CSE>Что означает двойной отрицательный знак в исходном коде:

CSE>  static inline void input_report_key(struct input_dev *dev, unsigned int code, int value)
CSE>{
CSE>    input_event(dev, EV_KEY, code, !!value);  /* *** */
CSE>}

Он обозначает сравнение с нулём /* *** */ эквивалентно этому:
    input_event(dev, EV_KEY, code, value != 0 );
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: ни ни!!!
От: ChistovSE  
Дата: 05.08.10 18:36
Оценка: +1 :)
Здравствуйте, Erop, Вы писали:

E>Он обозначает сравнение с нулём /* *** */ эквивалентно этому:
    input_event(dev, EV_KEY, code, value != 0 );


Спасибо за помощь, а то гуглить замучался .
-------------------------
Сергей Ч.
Нижний Новгород
Re: оператор - 2 восклицательных знака
От: Vamp Россия  
Дата: 05.08.10 18:36
Оценка:
CSE>Что означает двойной отрицательный знак в исходном коде:
Это такой трюк для превращение value в логическую единицу. Полученное значение можно сравнивать с другой логической единицей оператором =.
Да здравствует мыло душистое и веревка пушистая.
Re[3]: ни ни!!!
От: Erop Россия  
Дата: 05.08.10 18:37
Оценка: 1 (1) -1 :)
Здравствуйте, ChistovSE, Вы писали:

CSE> Спасибо за помощь, а то гуглить замучался .

Всегда пожалуйста.
Для "спасибо" тут есть кнопки
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: оператор - 2 восклицательных знака
От: Erop Россия  
Дата: 05.08.10 18:50
Оценка: +6
Здравствуйте, Vamp, Вы писали:

V>Это такой трюк для превращение value в логическую единицу. Полученное значение можно сравнивать с другой логической единицей оператором =.


1) Лучше, всё-таки сравнивать оператором ==
2) Никогда не понимал, зачем так страдать. Нет бы написать понятно ххх != 0
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: оператор - 2 восклицательных знака
От: Vamp Россия  
Дата: 05.08.10 18:59
Оценка: :))
E>1) Лучше, всё-таки сравнивать оператором ==
Ну, это понятно. Опчтк.
E>2) Никогда не понимал, зачем так страдать. Нет бы написать понятно ххх != 0
Запись короче.
Да здравствует мыло душистое и веревка пушистая.
Re[4]: оператор - 2 восклицательных знака
От: Erop Россия  
Дата: 05.08.10 19:00
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Запись короче.

Типа на символ? прикольный подход к кодированию...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: оператор - 2 восклицательных знака
От: Vamp Россия  
Дата: 05.08.10 19:02
Оценка:
E>Типа на символ? прикольный подход к кодированию...
Гораздо больше, чем на один символ.
x != 0 — 6 символов.
!!х — 3 символа. В 2 раза быстрее!
Да здравствует мыло душистое и веревка пушистая.
Re[3]: оператор - 2 восклицательных знака
От: Mr.Delphist  
Дата: 05.08.10 19:04
Оценка: -3
Здравствуйте, Erop, Вы писали:

E>2) Никогда не понимал, зачем так страдать. Нет бы написать понятно ххх != 0


Как я понимаю, это пошло-поехало от умных указателей. Там оператор "!" переопределяется с целью изучить внутреннее содержимое, а не обертку.

p = NULL;
if (p)
{
  // do something
}
if (!!p)
{
  // do something
}


Если p — обычный указатель, то оба if пролетят мимо, а если p — "умный", то в первый if мы таки заскочим. Получается, что написание !! превращает код в легко мигрирующий (или безопасную заготовку для шаблона).
Re[6]: оператор - 2 восклицательных знака
От: Erop Россия  
Дата: 05.08.10 19:07
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Гораздо больше, чем на один символ.

V>x != 0 — 6 символов.
V>!!х — 3 символа. В 2 раза быстрее!

Ну пробелы-то можно и не писать. Кроме того надо ещё учитывать, что не x, а value

Так что получаем !!value (7символов) против value!=0 (8символов)... Не такая уж и экономия-экономия.


Но подход всё равно прикольный Наверное тогда ещё все переменные надо называть одной буквой, а функции двумя, а в больших прогах тремя
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: оператор - 2 восклицательных знака
От: Erop Россия  
Дата: 05.08.10 19:09
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Если p — обычный указатель, то оба if пролетят мимо, а если p — "умный", то в первый if мы таки заскочим. Получается, что написание !! превращает код в легко мигрирующий (или безопасную заготовку для шаблона).


Не понятно, чем же != 0 плох в этом контексте.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: оператор - 2 восклицательных знака
От: Erop Россия  
Дата: 05.08.10 19:10
Оценка: +1
Здравствуйте, Mr.Delphist, Вы писали:

MD>Как я понимаю, это пошло-поехало от умных указателей. Там оператор "!" переопределяется с целью изучить внутреннее содержимое, а не обертку.


Думаю, что ты ошибаешься, кстати. Так как такие конструкции были популярны в нативном С задолго до появления умных указателей
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: оператор - 2 восклицательных знака
От: Erop Россия  
Дата: 05.08.10 19:21
Оценка:
Здравствуйте, Vamp, Вы писали:

E>>1) Лучше, всё-таки сравнивать оператором ==

V>Ну, это понятно. Опчтк.

Интересно, какая именно. Так как сравнивать можно и оператором ^ и оператором -, ну и != и == тоже, кстати, но *крутые С-кодеры*, я так понимаю, таких лёгких путей не юзают?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: оператор - 2 восклицательных знака
От: Vamp Россия  
Дата: 05.08.10 19:27
Оценка:
E>Интересно, какая именно.
Угадай.
Да здравствует мыло душистое и веревка пушистая.
Re[6]: Неужели крышка? ;) (-)
От: Erop Россия  
Дата: 05.08.10 19:29
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Угадай.


Неужели крышка?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: оператор - 2 восклицательных знака
От: dilmah США  
Дата: 05.08.10 19:29
Оценка: 2 (2) +1
E>2) Никогда не понимал, зачем так страдать. Нет бы написать понятно ххх != 0

это видимо зависит от людей и их бэкграунда.

Для меня более понятно !!x
Почему. Взгляд сразу видит двойное отрицание, сразу очевидно что двойное отрицание не меняет логического значения x. С другой стороны известно, что результат любого логического выражения это либо 1 либо 0.
Поэтому сразу видно, что логическое значение не меняется, и оно только нормализуется к 1/0

Когда я смотрю на x != 0 мне уже нужно думать, а что же тут происходит, мозг не находит такой очевидной подпорки как двойное отрицание, тут нет автоматизма, мне нужно на пару секунд задуматься, чтобы понять что логическое значение не меняется.
Re[7]: Неужели крышка? ;) (-)
От: Vamp Россия  
Дата: 05.08.10 19:31
Оценка: :)
E>Неужели крышка?
А вот и не угадал. Ты проиграл, с тебя миллион юаней.
Да здравствует мыло душистое и веревка пушистая.
Re[4]: оператор - 2 восклицательных знака
От: Erop Россия  
Дата: 05.08.10 19:33
Оценка:
Здравствуйте, dilmah, Вы писали:

D>Когда я смотрю на x != 0 мне уже нужно думать, а что же тут происходит, мозг не находит такой очевидной подпорки как двойное отрицание, тут нет автоматизма, мне нужно на пару секунд задуматься, чтобы понять что логическое значение не меняется.


Прикольно. А если
x != FALSE


Как бы пишут: "икс не ноль/ложь". Неужели нечитабельно?

Кроме того, в приведённом контексте название переменной наводит на мысли, что это таки число. Что такое "двойное отрицание пяти", например?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: Отправил в личку. ;)
От: Erop Россия  
Дата: 05.08.10 19:36
Оценка:
Здравствуйте, Vamp, Вы писали:

V>А вот и не угадал. Ты проиграл, с тебя миллион юаней.


А зачем тебе юани, кстати? США скоро планирует сдаваться КНР?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.