Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2010, 12:41   #1
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию быстрое вычисление XOR

мне нужно вычислять адрес второго близнеца в ДВП(дин. выдел. памяти) метод близнецов. Адрес второго близнеца равен A XOR SIZE , A - адрес первого близнеца, size - его размер.

Не программно, а на листе бумаги.

Допустим близнец(адрес,размер): (6144,1024)

адрес второго будет 6144 xor 1024 = 7168

то есть a xor b = (a+b) или (a-b)

как узнать когда минус, когда плюс ?

хочу вычислять xor не переводя числа в двоичную
NiCola999 вне форума Ответить с цитированием
Старый 05.06.2010, 13:55   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

ааааааааап
NiCola999 вне форума Ответить с цитированием
Старый 05.06.2010, 15:42   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

что Вы непонятное хотите...
практически в любом ЯП есть операция XOR
например, в Pascal:
Код:
C := A xor B;
что Вам надо то?!

Вы хотите понять, что такое XOR (она же сложение по модулю 2, она же Исключающее ИЛИ) ?! Так ТУТ разжёванно...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.06.2010, 20:15   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

читайте внимательнее мой пост:
Цитата:
Не программно, а на листе бумаги.
мне это нужно для теста в универе
NiCola999 вне форума Ответить с цитированием
Старый 05.06.2010, 22:09   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так я же ссылочку на статью в Википедии дал..

не разобрались?!

Поясню.
1) переводим числа в двоичный вид.
2) дальше выполняем поразрядно

Если считаем, что выполняем суммирование по модулю два:
это означает, что
0 + 0 даёт 0
0 + 1 даёт 1
1 + 0 даёт 1
1 + 1 даёт 0 (т.е. превышает 2-ку по модулю)

или, если брать во внимание исключающее ИЛИ (это другое название всё того же вездесущего XOR)
тогда правило такое - единица получает ТОЛЬКО в том случае, когда разряды различны (0 и 1 ; 1 и 0)
когда разряды одинаковы - результат операции - ноль.

p.s. если сравните с таблицей истинности, полученной в результате сложения по модулю два, увидите, что это даёт один и тот же результат.

Теперь я Вас правильно понял? Или расписать поразрядно на примере Ваших чисел из #1 ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.06.2010, 11:32   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

извините меня конечно)) но вы так и не поняли ( то ли прочитали опять невнимательно то ли хз) что мне нужно. Я хочу считать XOR без перевода в двоичную систему... знаете... там в тесте 7 пар чисел, которые надо перексорить чтобы найти близнецов для каждой пары. Переводить каждое число в двоичное это бред). То что вы мне дали по ссылке, спасибо конечно, но я это знаю еще с курса дискр. математики и это не то что мне хотелось.
NiCola999 вне форума Ответить с цитированием
Старый 06.06.2010, 11:39   #7
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

6144 в двоичной - это 1100000000000.
И, как указано выше, 0 xor 1 = 1, т.е. сумма.
Т.е. если b в пределах этих нулей, то будет сумма.

2047 = 011111111111.
1 xor 1 = 0 и 1 xor 0=1, будет вычитание.

А вот если взять число 1878 = 11101010110.
Где - сумма, где - вычитание.

_____________________
xor вычисляется так:

Разложить числа a и b на максимальные числа в степени двойки.

333=256 + 64 + 8 + 4 + 1; //эти числа символизируют один включенный бит, т.е. 2^8=256 - восьмой бит.
75=64 + 8 + 2 + 1;

Т.к. 1 xor 1 = 0, то вычеркиваются все совпадения.

333=256 + 4;
75= + 2;

Т.к. "0 xor 1 = 1" и "1 xor 0 = 1", складываем.
Результат: 260+2=262;

Или, например:
405=256+128+16+4+1;
35=32+2+1;
Вычеркиваем совпадения.
405=256+128+16+4;
35=32+2;
Суммируем.
404+34=438;

Еще пример:
2452=2048+256+128+16+4;
791=512+256+16+4+2+1; //не забываем про 2 и 1
Снова вычеркиваем совпадения.
2452=2048+128;
791=512+2+1;
Складываем.
2176+515=2691;

И совсем легко:
5=4+1
3=2+1
4+2=6

Таким способом можно вычислить or и and, и даже shr и shl.
Indian вне форума Ответить с цитированием
Старый 06.06.2010, 11:56   #8
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

спасибо !!!
NiCola999 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ох уж эти OR, AND, XOR! NSV Свободное общение 6 27.03.2010 10:38
алгоритм XOR ravmad Общие вопросы C/C++ 2 29.05.2009 21:21
Функциональная схема к (A and B xor C) and B Artemd999 Помощь студентам 4 09.01.2009 01:21