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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
27.07.2012, 19:45     Оператор xor #1
Всем добрый вечер.Чем отличаются следующие выражения:

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

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

Не по теме:

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

Leomana
58 / 58 / 5
Регистрация: 29.06.2012
Сообщений: 188
27.07.2012, 20:36     Оператор xor #8
Цитата Сообщение от Thinker Посмотреть сообщение

Не по теме:

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

ну конечно это разные вещи =)
b_kasenov47
14 / 14 / 1
Регистрация: 28.07.2012
Сообщений: 57
28.07.2012, 22:17     Оператор xor #9
a ^ b == (a & (~b)) | ((~a) & b)
Вроде я так понимаю. Т.е. одно из них истина а другое ложь. Тогда 1, иначе - 0.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
29.07.2012, 03:03     Оператор xor #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 - разрядность процессора, числа не приводятся к логическому виду и берутся "как есть". Операнд является двоичным вектором, производится логическая операция с каждым битом операндов (вектора с вектором), результат соответственно записывается в соответствующий бит результата(регистра) и на выходе ты имеешь неформатированное число.
b_kasenov47
14 / 14 / 1
Регистрация: 28.07.2012
Сообщений: 57
29.07.2012, 12:27     Оператор xor #11
я так вчитался...
1)т.е. получается, что мое выражение верно лишь для беззнаковых целых???
2)оно верно для логических выражений?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2012, 13:03     Оператор xor
Еще ссылки по теме:

Оператор для xor шифрования C++
XOR without XOR C++
XOR пароля C++

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

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
29.07.2012, 13:03     Оператор xor #12
Цитата Сообщение от b_kasenov47 Посмотреть сообщение
я так вчитался...
1)т.е. получается, что мое выражение верно лишь для беззнаковых целых???
2)оно верно для логических выражений?
1. Оно верно для любых целых, биты везде одинаковы.
2. Технически да, false приводится к нулю, true к единице, так что всё окей.
Yandex
Объявления
29.07.2012, 13:03     Оператор xor
Ответ Создать тему
Опции темы

Текущее время: 15:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru