Цитата(XVR @ Mar 22 2013, 16:58)

Язык С был придуман для упрощения жизни программисту, которому не хотелось писать на ассемблере. Поэтому он практически дословно повторяет особенности той аппаратной платформы, для которой был создан. А эта платформа умела оперировать с числами, а не с множествами. Поэтому '!0' обозначает результат применения операции 'логическое отрицание' к числу 0. Результат этой операции 1. Просто число 1, хотя бы потому, что ни машина ни язык С напрямую с множествами не работают!
теперь уже и историческую справку в доказательство привели. а ведь "не 33" на самом деле обозначает "все что угодно, кроме 33". даже если процессор работает только с нулями и единицами. и уж точно это не единственный вариант.
Цитата(XVR @ Mar 22 2013, 16:58)

Если хотите что бы '!0' обозначало именно множество (как 'принято в математике, логике и вобще жизни') - вам нужен другой язык. Язык С не оперирует с абстрактными математическими понятиями. Возьмите Matlab - он умеет. Или возьмите С++ и библиотеку для работы с множествами - тогда ваше любимое выражение (a == !0) будет обозначать именно то, как 'принято в математике, логике и вобще жизни'
как обычно, решение кардинальное - не нравится, не ешь. но не смей говорить, что не нравится! очевидно, что нежелание применять логику дает о себе знать...
Цитата(XVR @ Mar 22 2013, 16:58)

'НИ ДЛЯ КОГО' - это лично вы? Все остальные вроде как на непонимание не жаловались
Это вполне нормальная и кристально прозрачная запись (по крайней мере для того, кто достаточно хорошо знает язык)
и именно поэтому 2 дня никто не заметил, что это слегка мутная кристальность... было написано
a = !!b ^ !!c; а стало
a = !b ^ !c; - для вас это все равно?! вы ведь тоже не поняли СРАЗУ, что это НЕ САМЫЙ ИДЕАЛЬНЫЙ вариант

а тривиальный
a = (!c &&
|| (!b && c) понятен всем. или на самом деле здесь просто не было тех, кто достаточно хорошо знает язык? надо бы определиться
повторяю для знатоков и тех, кто к ним себя причисляет:
1. я ЗНАЮ, как работает Си. и ПОНИМАЮ, почему и как работает
a = !b ^ !c; и даже разницу между
a != 0 и
a == !0 в соответствии со стандартами Си приемлю. и даже историю создания языка мало-мало представляю
2. я вижу, что все просто следуют догматам веры, не задумываясь, именно поэтому никто и не заметил лишнего знака, ибо напрягать-то мозг лишний раз все равно никому не хочется, даже профессиональному гуру. показали работающий более краткий вариант - готов его применить, считая лучшим, и не надо напрягаться.
3. я осознаю, что если не стремиться буть круче, чем яйцо на пасху, то и на Си можно писать код, который с точки зрения процессора будет идеальным, а с точки зрения ЛЮБОГО человека красивым и понятным.
4. сторонников моего принципа "разумного самоограничения ради логики" здесь нет, потому что в синагоге кришне не молятся.
раз Кернигана из меня не вышло, придется переквалифицироваться в управдомы
P.S. беда не в том, что ваши попытки подколоть меня своими "специально для ARV" попадают мимо, беда в том, что мимо вас попадают мои попытки донести мысль...
(не а) не эквивалентно (не б) как раз является правильной записью утверждения об отсутсвии пересечения множеств... но вы даже не пытаетесь это осмыслить...