|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.07.2010, 01:48 | #1 |
Форумчанин
Регистрация: 07.07.2010
Сообщений: 825
|
Опирации булевской логики
Обьесните пожалуста принципиальное отличие операций & и &&(или | и ||).Основное отличие я занаю.Так зачем их две ? И что чаще всего употребляют? И что & и |-это порязрядные операции я тоже вкурсе. Мне нужно их употребление в булевской логике.И что стандарт из них в употреблении в языке мне оч. важно.
|
07.07.2010, 02:05 | #2 |
Форумчанин
Регистрация: 24.03.2009
Сообщений: 215
|
& - логическое "и" (конъюнкция)
| - логическое "или" (дизъюнкция) Код:
&& и || - это операции булевой логики, которые отвечают за "и" и "или" соответственно. Очень тяжело объяснить разницу, но она принципиальна. Между & и &&, между | и || вообще практически ничего общего нету. Дам, пожалуй, пример. Допустим, нам нужно узнать, четное число или нечетное. Естественно, если число четное - последним битом будет 0, если нечетное - 1. Конъюнкция нашего числа и единицы даст в принципе либо единицу, либо ноль. Если в итоге будет единица - последний бит 1 и число нечетное, и наоборот. Код:
wyvern@localhost:~$ sudo emerge --unmerge world
Последний раз редактировалось wyvern; 07.07.2010 в 02:25. |
07.07.2010, 03:07 | #3 |
Форумчанин
Регистрация: 07.07.2010
Сообщений: 825
|
Спасибо wyvern. Чесно говоря я не знал что четность можно определять так(а я всё через %).Там по моему надо место второй "1" надо x(если ошибаюсь поправте-я не сильный програмист). Я имел ввиду разницу между & и &&.Но ответ я кажется нашел сам. Самое интересное что (если опять же не ошибаюсь) & и | в булевской логике можно использовать.Разница в том ,что если мы используем &&, а не & то
язык не будет использовать оценку правого оператора перед вычисление всего выражения ,так как результат выражения будет определяться только одним левым оператором.Т.е если левый операнд будет false,то правый оцениваться вообще не будет(при &&).Например: if(demon!=0 && num/demon>10); Нет риска исключительной операции. При & проверяются 2 операнда.Например: if(c==1 & e++>10) d=100; Эта операция гарантирует что инкремент будет применяться в не зависимости равна ли переменная с==1 или нет. Если ошибаюсь поправте или напишите кто что знает есчё про это. |
07.07.2010, 06:19 | #4 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
int x = 5; if(x & 2) Label1->Caption = "true"; else Label1->Caption = "false"; В этом случае выведется значение false. Если сделать вот так: if(x && 2)..... то true. Почему так происходит для меня осталось загадкой. Но факт есть факт! Кстати x = x & 2 (результат 1) и x = x && 2 (результат 0) тоже не эквивалентны, хотя компилятор ошибку не выдаёт
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder Последний раз редактировалось Smitt&Wesson; 07.07.2010 в 06:22. |
|
07.07.2010, 06:29 | #5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
5&2=101&10=0(второе это бинарный вид)
5&&2=true&&true=true(привидение к булевому типу, то что не ноль считается true) &&-логическое И(конъюнкция/умножение), результат операции это true/false #define TRUE 1 #define FALSE 0 Код:
теперь замените TRUE/FALSE на значения, и я думаю будет понятно. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 07.07.2010 в 06:35. |
07.07.2010, 07:33 | #6 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Спасибо Пепел Феникса. Да я уже и сам разобрался. Просто как то не задумывался над этим вопросом. Как говорьться если язык требует, так и пишем.
Грубо говоря операция & работает над битами в байтах, а && над логическими выражениями в операциях сравнения (во завернул )
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
07.07.2010, 08:35 | #7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
& - вернет числовое значение а && - булевое, вот и вся разница. Как таково это важно для компиляторов и программиста, не более.
I'm learning to live...
|
|
07.07.2010, 11:25 | #8 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
& же работает бинарно/побитово, вовращает больший из двух типов. в какой то мере можно сказать что & состоить из серии && для пар битов. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Раздел Алгебры Логики | Базиля | Помощь студентам | 1 | 23.12.2009 00:13 |
Примеры по алгебре логики | polukrovka | Помощь студентам | 4 | 08.12.2009 15:10 |
Развитие логики | Lemo | Помощь студентам | 5 | 04.11.2009 14:23 |
Помогите пожалуйста с Булевской алгеброй. | ksu25 | Помощь студентам | 2 | 25.09.2009 20:03 |
Элементы математической логики. Высказывания | Vesnushka18 | Помощь студентам | 1 | 11.04.2008 17:40 |