Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
#1

Оператор xor - C++

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

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

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

C++
1
     (a^b);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2012, 19:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оператор xor (C++):

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

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

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

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

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

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

11
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
27.07.2012, 19:53 #2
^ - побитовое (поразрядное) исключающее или
а || и && это логические операции
1
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2012, 19:55 #3
В первом случае это логическое выражение, а во втором - побитовое. А вот так:
(a | b) & ~(a & b)
и
a^b
это уже одно и тоже, только второе быстрее считается.
1
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
27.07.2012, 19:55  [ТС] #4
Но результат один и тот же!!! Почему?
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2012, 19:57 #5
Цитата Сообщение от bgm313 Посмотреть сообщение
Но результат один и тот же!!! Почему?
Потому что эти выражения задают одну и ту же функцию.
1
Leomana
58 / 58 / 5
Регистрация: 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
Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
27.07.2012, 20:36 #8
Цитата Сообщение от Thinker Посмотреть сообщение

Не по теме:

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

ну конечно это разные вещи =)
0
b_kasenov47
14 / 14 / 1
Регистрация: 28.07.2012
Сообщений: 57
28.07.2012, 22:17 #9
a ^ b == (a & (~b)) | ((~a) & b)
Вроде я так понимаю. Т.е. одно из них истина а другое ложь. Тогда 1, иначе - 0.
0
alkagolik
Заблокирован
29.07.2012, 03:03 #10
b_kasenov47, нет. Ложь, истина в случае битовых операций применяются к каждому биту в отдельности, тогда как в логических выражениях это просто возврат регистра флага, который устанавливается если результат операции равен нулю.
В твоем случае логическое сложение по модулю
http://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}) выступают операнды множества http://www.cyberforum.ru/cgi-bin/latex.cgi?-2^{n}..2^{n}-1
http://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}
http://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
b_kasenov47
14 / 14 / 1
Регистрация: 28.07.2012
Сообщений: 57
29.07.2012, 12:27 #11
я так вчитался...
1)т.е. получается, что мое выражение верно лишь для беззнаковых целых???
2)оно верно для логических выражений?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
29.07.2012, 13:03 #12
Цитата Сообщение от b_kasenov47 Посмотреть сообщение
я так вчитался...
1)т.е. получается, что мое выражение верно лишь для беззнаковых целых???
2)оно верно для логических выражений?
1. Оно верно для любых целых, биты везде одинаковы.
2. Технически да, false приводится к нулю, true к единице, так что всё окей.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2012, 13:03
Привет! Вот еще темы с ответами:

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

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

быстрый xor - C++
Нужно про-xor-ить биты в числе. Можно ли это сделать быстрее, чем u_char r = 0; for (i = 0; i &lt; sizeof (u_char); ++i) r ^= (n &gt;&gt;...

XOR шифрование - C++
Здравствуйте. Не хотел создавать ещё тему, но у меня не все гладко прошло с XOR шифрованием, не смотря на то, что там все просто. Не пойму...


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
29.07.2012, 13:03
Ответ Создать тему
Опции темы

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