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

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

Войти
Регистрация
Восстановить пароль
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

Xor на не примитивный тип - C++

02.12.2013, 15:40. Просмотров 267. Ответов 8
Метки нет (Все метки)

Собственно, как?
C++
1
2
3
4
5
6
struct X
{
unsigned char a, b, c, d, e;
}
/*...*/
X x1, x2, x3 = x1 ^ x2; //не дает
(не важно, что не инициализированы)
Вручную перебирать Xor-ом все 5 полей - не комильфо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2013, 15:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Xor на не примитивный тип (C++):

Примитивный интерфейс к си++ - C++
Привет, парни. Поступило задание, сделать игрушку крестики нолики с примитивным интерфейсом. В консоли код более менее написал, работает, а...

Примитивный шаблонный класс С++ - C++
Создайте пожалуйста любой шаблонный класс на начальном (или "примитивном") уровне языка. Для понимания сделайте с розьяснением...

Не компилируется примитивный код - C++
Ребят вчера поставил visual studio, всё норм создаю проект win 32 object, добавляю новый предмет файл с++, и при компиляции простого...

Самый простой, примитивный морской бой - C++
Достаточно много исходников уже искал но так и не нашел что нужно нужно как можно проще написать примитивный морской бой 10х10 ...

Пишу примитивный никому не нужный контейнер - C++
захотелось для практики написать аналог array из STL :) ну не полностью аналог, так, по своему как мне он был бы удобен... безо всяких...

Примитивный текстовый редактор основанный на итераторах (по Страуструпу) - C++
Доброго времени суток! Пытаюсь реализовать текстовый редактор описанный Страуструпом в его Принципах и Практике. Его код не работает,...

8
newbie666
Заблокирован
02.12.2013, 15:42 #2
а откуда компилятор знает, что с твоей структурой делать? определяй вместо структуры класс и переопределяй ксор для него
1
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
02.12.2013, 15:45 #3
Ну... Э... не вручную тогда? Тащемта определить операторы например?
C++
1
2
3
4
5
6
7
8
9
10
11
12
X& operator ^= (const X& rhs)
{
    a ^= rhs.a;
    b ^= rhs.b;
   ...
    return *this;
}
 
X operator ^ (const X& rhs) const
{
    return X(*this) ^= rhs;
}
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
02.12.2013, 15:51  [ТС] #4
Неужели нельзя компилятор заставить заксорить каждый отдельный элемент - не важно, что это - указатель, другой класс или POD?
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
02.12.2013, 16:04 #5
Напрямую, нельзя, потому что далеко не факт, что для них определён оператор ^, а произвольные memberwise-конструкции в C++ не предусмотрены, только несколько специальных случаев. Разумеется, тем, кто не боится грязи, никто не мешает работать с памятью напрямую:
C++
1
2
3
4
5
6
7
8
9
10
11
template<typename T>
T Xor(const T& lhs, const T& rhs)
{
    T rv(lhs);
    unsigned char* dst = reinterpret_cast<unsigned char*>(&rv);
    unsigned char* const end = dst + sizeof(T);
    const unsigned char* src = reinterpret_cast<const unsigned char*>(&rhs);
    for(; dst != end; ++dst, ++src)
        *dst ^= *src;
    return rv;
}
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
02.12.2013, 16:26  [ТС] #6
Nick Alte, странно. Просто не понимаю, чо мешает компилятору ксорить побитово во всех случаях.. Указатели - те же int, структуры составлены из указателей и POD с вероятностью 100%, ведь даже если в структуре есть объекты других классов, к ним можно применить то же правило и в конце концов все поля за-xor-ятся :< Понятно дело, что такое никогда не пригождается, но.. :/
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.12.2013, 17:05 #7
Цитата Сообщение от newbie666 Посмотреть сообщение
определяй вместо структуры класс и переопределяй ксор для него
А что для структуры уже нельзя оператор перегрузить?
Цитата Сообщение от nexen Посмотреть сообщение
Просто не понимаю, чо мешает компилятору ксорить побитово во всех случаях
Потому что это не нужно. Таким макаром можно и про все остальные операторы рассуждать.
Цитата Сообщение от nexen Посмотреть сообщение
Понятно дело, что такое никогда не пригождается, но..
Вот сами и ответили
0
newbie666
Заблокирован
02.12.2013, 17:06 #8
Цитата Сообщение от Tulosba Посмотреть сообщение
А что для структуры уже нельзя оператор перегрузить?
даа можно конечно
класс просто по солидней будет
А ваще все эти структуры и классы только наследованием и отличаются
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.12.2013, 17:22 #9
Цитата Сообщение от newbie666 Посмотреть сообщение
структуры и классы только наследованием и отличаются
доступом по умолчанию, я бы сказал.
0
02.12.2013, 17:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2013, 17:22
Привет! Вот еще темы с ответами:

Запрос: условие выбора, тип не примитивный - 1С
Освоил запросы с условиями, где используются примитивные типы. Например, могу выбрать по номеру строки или отметке &quot;проведен&quot;. Но...

Есть ли в BCL примитивный тип для представления 16-ричных чисел - C#
Всем доброго времени суток! Вопрос такой - есть ли в C# примитив данных hex(число в 16-ричной системе счисления)? Я не нашел - прошу...

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

Реализовать внешнюю функцию с именем make _ тип (), где тип — тип реализуемой структуры - Java SE
Реализовать внешнюю функцию с именем make _ тип (), где тип — тип реализуемой структуры. Функция должна получать в качестве аргументов...


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

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

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