Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
1

Оператор xor

27.07.2012, 19:45. Просмотров 2113. Ответов 11
Метки нет (Все метки)

Всем добрый вечер.Чем отличаются следующие выражения:

C++
1
     (a || b) && !(a && b);
и

C++
1
     (a^b);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2012, 19:45
Ответы с готовыми решениями:

оператор XOR
объясните, что делает XOR, желательно понятным простому смертному языком. например: 0 xor 1 = 1...

Оператор для xor шифрования
Разматриваю пример шифрования, возник детский вопрос ^ что делает этот оператор?

Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1
В С++ я ноль, помогите пожалуйста написать прогу Написать программу, содержащую оператор...

Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки
Здравствуйте. В С++ я абсолютный новичок, поэтому с первым же заданием возникли определённые...

11
59 / 59 / 8
Регистрация: 29.06.2012
Сообщений: 188
27.07.2012, 19:53 2
^ - побитовое (поразрядное) исключающее или
а || и && это логические операции
1
Эксперт С++
4251 / 2225 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2012, 19:55 3
В первом случае это логическое выражение, а во втором - побитовое. А вот так:
(a | b) & ~(a & b)
и
a^b
это уже одно и тоже, только второе быстрее считается.
1
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
27.07.2012, 19:55  [ТС] 4
Но результат один и тот же!!! Почему?
0
Эксперт С++
4251 / 2225 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2012, 19:57 5
Цитата Сообщение от bgm313 Посмотреть сообщение
Но результат один и тот же!!! Почему?
Потому что эти выражения задают одну и ту же функцию.
1
59 / 59 / 8
Регистрация: 29.06.2012
Сообщений: 188
27.07.2012, 20:13 6
Цитата Сообщение от bgm313 Посмотреть сообщение
Но результат один и тот же!!! Почему?
ну вообще не одно и то же..
C++
1
2
3
4
5
6
7
8
int main(){
        int a =6;
        int b =5;
        cout << ((a || b) && !(a && b));
        cout<<endl<<(a^b);
        _getch();
        return 0;
}
0
Thinker
27.07.2012, 20:18
  #7

Не по теме:

Leomana,
(a | b) & ~(a & b)
и
a^b
это одно и тоже, а не то, что в первом посте. Логическое и побитовое выражения разве можно сравнивать?!...

0
59 / 59 / 8
Регистрация: 29.06.2012
Сообщений: 188
27.07.2012, 20:36 8
Цитата Сообщение от Thinker Посмотреть сообщение

Не по теме:

Leomana,
(a | b) & ~(a & b)
и
a^b
это одно и тоже, а не то, что в первом посте. Логическое и побитовое выражения разве можно сравнивать?!...

ну конечно это разные вещи =)
0
14 / 14 / 3
Регистрация: 28.07.2012
Сообщений: 57
28.07.2012, 22:17 9
a ^ b == (a & (~b)) | ((~a) & b)
Вроде я так понимаю. Т.е. одно из них истина а другое ложь. Тогда 1, иначе - 0.
0
Заблокирован
29.07.2012, 03:03 10
b_kasenov47, нет. Ложь, истина в случае битовых операций применяются к каждому биту в отдельности, тогда как в логических выражениях это просто возврат регистра флага, который устанавливается если результат операции равен нулю.
В твоем случае логическое сложение по модулю
https://www.cyberforum.ru/cgi-bin/latex.cgi?x\oplus y \equiv \bar{x} \wedge y \vee x \wedge \bar{y} \equiv x \vee y \wedge \bar{ x \wedge y}
в качестве операндов выступают байты, которые приводятся к единице, если они не равны нулю и далее вычисляется выражение.
Битовое сложение по модулю то же самое, !но... вместо операндов (множество {0,1}) выступают операнды множества https://www.cyberforum.ru/cgi-bin/latex.cgi?-2^{n}..2^{n}-1
https://www.cyberforum.ru/cgi-bin/latex.cgi?X\oplus Y \equiv \bar{X} \wedge Y \vee X \wedge \bar{Y} \equiv X \vee Y \wedge \bar{ X \wedge Y}
https://www.cyberforum.ru/cgi-bin/latex.cgi?X=\{x_{n - 1}, ..., x_{1}, x_{0}\}, Y=\{y_{n - 1}, ..., y_{1}, y_{0}\}
n - разрядность процессора, числа не приводятся к логическому виду и берутся "как есть". Операнд является двоичным вектором, производится логическая операция с каждым битом операндов (вектора с вектором), результат соответственно записывается в соответствующий бит результата(регистра) и на выходе ты имеешь неформатированное число.
0
14 / 14 / 3
Регистрация: 28.07.2012
Сообщений: 57
29.07.2012, 12:27 11
я так вчитался...
1)т.е. получается, что мое выражение верно лишь для беззнаковых целых???
2)оно верно для логических выражений?
0
~ Эврика! ~
1253 / 1002 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
29.07.2012, 13:03 12
Цитата Сообщение от b_kasenov47 Посмотреть сообщение
я так вчитался...
1)т.е. получается, что мое выражение верно лишь для беззнаковых целых???
2)оно верно для логических выражений?
1. Оно верно для любых целых, биты везде одинаковы.
2. Технически да, false приводится к нулю, true к единице, так что всё окей.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2012, 13:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор *
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор...

Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости
для чего нужен оператор двоеточие ( : ), если два двоеточия( :: ) - это оператор расширения области...

XOR without XOR
Здравствуйте, уважаемые знатоки) В общем-то интересует (как можно воплотить подобную штуку) ...

xor, not
кто может помочь с операциями ^(xor) и -(not). если можно навести примеры с реальными числами что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.