Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,641
Записей в блоге: 14

Замена оператора Xor

02.11.2017, 21:01. Показов 5274. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто знает, чем заменить этот оператор для условий? Какой-то грамотей создал побитовый Xor - "^", но не создал обычный, для проверки условий. Пока что сделал так:
C++
1
2
if ((a == true && b == false) || (a == false && b == true)) {}
//Вместо: if (a == true xor b == true) {}
Нет способа написать это же короче?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.11.2017, 21:01
Ответы с готовыми решениями:

Замена оператора %
Привет всем форумчанам! Впервые тут, так как только начал учиться программировать. Подскажите, кто знает - как заменить оператор %?...

Замена оператора += двумя способами
Помогите заменить оператор += в c++ , двумя способами

Использование оператора XOR
Есть функция которая преобразует текст: function XORText(text:string):string; var key, longkey : string; i : integer; toto: char; ...

10
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
02.11.2017, 21:04
^ работает не хуже.

Исключение — когда у вас не буловский тип используется как логический.
0
11 / 11 / 11
Регистрация: 18.01.2016
Сообщений: 98
02.11.2017, 21:06
если a и b переменные типа bool то можно так
C++
1
if (a != b) {}
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,641
Записей в блоге: 14
02.11.2017, 21:06  [ТС]
А например, вместо такого:
if (a1 == a2 xor b1 == b2) {}
Как написать это на C++?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12944 / 6811 / 1821
Регистрация: 18.10.2014
Сообщений: 17,236
02.11.2017, 21:08
Лучший ответ Сообщение было отмечено Etyuhibosecyu как решение

Решение

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
А например, вместо такого:
if (a1 == a2 xor b1 == b2) {}
Как написать это на C++?
C++
1
if ((a1 == a2) != (b1 == b2))
1
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,641
Записей в блоге: 14
02.11.2017, 21:10  [ТС]
TheCalligrapher, спасибо! Только как это получается, что можно результаты сравнения еще раз сравнивать?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12944 / 6811 / 1821
Регистрация: 18.10.2014
Сообщений: 17,236
02.11.2017, 21:11
Как правильно заметил Colt_11 выше, для булевских значений (или для 0/1) xor - это просто !=.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Только как это получается, что можно результаты сравнения еще раз сравнивать?
Не понимаю, откуда возникает такой вопрос. Результат сравнения в С++ - это значение типа bool. Значения типа bool всегда можно было сравнивать.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,641
Записей в блоге: 14
02.11.2017, 21:13  [ТС]
TheCalligrapher, проблема вот в чем: результаты сравнения - какие-либо переменные или константы?
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
02.11.2017, 21:13
Хм, таки он не подходит, когда используется целое число как логическое значение (0 — ложь, а вот 1 и 100 — истина). Битовый xor даёт true, что неправильно. Но есть решение: !a^!b
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
 
int main()
{
    int a,b,c;
    using namespace std;
    cin>>a>>b>>c;
    if(a^b)
        cout<<"a^b is true\n";
    else
        cout<<"a^b is false\n";
    
    if (a^c)
        cout<<"a^c is true\n";
    else
        cout<<"a^c is false\n";
    if (!a^!b)
        cout<<"!a^!b is true\n";
    else
        cout<<"!a^!b is false\n";
}
Выполнение:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
 
int main()
{
    int a,b,c;
    using namespace std;
    cin>>a>>b>>c;
    if(a^b)
        cout<<"a^b is true\n";
    else
        cout<<"a^b is false\n";
    
    if (a^c)
        cout<<"a^c is true\n";
    else
        cout<<"a^c is false\n";
    if (!a^!b)
        cout<<"!a^!b is true\n";
    else
        cout<<"!a^!b is false\n";
}
Как видите, в варианте с предварительным отрицанием обоих операндов всё ок.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,641
Записей в блоге: 14
02.11.2017, 21:14  [ТС]
TheCalligrapher, простите, не прочитал. Я не умею одновременно писать и читать с такой скоростью. Спасибо.
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
02.11.2017, 21:26
Опять же, !a ^ !b лучше, чем a!=b, так как первый вариант даст ложь при 4 и 1, а второй даст истину.

Добавлено через 2 минуты
Кстати, для чисто логических значений нет разницы между ^ и !=, так как там значения отличаются только на один бит.
Но во многих программах на C++ в качестве условий используются числа, поэтому стоит быть осторожнее.

Добавлено через 1 минуту
Мой вариант работает на том, что результат операции ! всегда равен либо 1, либо 0, точно так же, как и вообще любых логических операций.

Добавлено через 1 минуту
Ну, и not A xor not B == A xor B по свойству логических операций.

Добавлено через 4 минуты
Упс, я накосячил с постом, где выполнение.

Там было так:
Code
1
2
3
4
1 2 0
a^b is true
a^c is true
!a^!b is false
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2017, 21:26
Помогаю со студенческими работами здесь

Шифрование XOR без использования оператора ^
Здравствуйте. Передо мной была поставлена задача написать алгоритм шифрования XOR без использования символа &quot;^&quot;. Я остановился на...

Простой пример с использованием оператора XOR
Помогите, разобраться с этим операторам.

Исключающее ИЛИ (XOR). Нужен пример операции побайтного XOR
Может кто-нибудь привести пример операции побайтного XOR?что-то вроде: есть данные,считанные из файла любого формата,эти данные по...

Замена оператора goto
Здравствуйте. Подскажите, пожалуйста, как в представленном коде правильно избавиться от оператора goto public class Decoder { ...

замена условного оператора
существует программа вначале которой мы делаем выбор: Console.WriteLine(&quot;Введите Hn:1;1.5;5;10&quot;); ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru