Операция XOR
Модератор: Модераторы
Операция XOR
Кто мне расскажет, как в Паскале реализована операция XOR? Что-то я найти не могу... 
Re: Операция XOR
В смысле? Открываем окно дизассемблера и смотрим.
Re: Операция XOR
Pavia
А если без ассемблера?
А если без ассемблера?
Re: Операция XOR
Она побитово ксорит числа:
13₁₀ = 1101₂
23₁₀ = 10111₂
13₁₀ xor 23₁₀ = (0)1101₂ xor 10111₂ = 11010₂ = 26₁₀
Это можно интерпретировать как флипание в одном из чисел битов, соответствующих выставленным в другом:
10110010 10101010₂ xor
00111111 11000000₂ =
10001101 01101010₂.
Если «как» не в смысле «что она делает», а в смысле «как», то это общепринятая ALU-операция наравне с AND/NOT/whatever.
13₁₀ = 1101₂
23₁₀ = 10111₂
13₁₀ xor 23₁₀ = (0)1101₂ xor 10111₂ = 11010₂ = 26₁₀
Это можно интерпретировать как флипание в одном из чисел битов, соответствующих выставленным в другом:
10110010 10101010₂ xor
00111111 11000000₂ =
10001101 01101010₂.
Если «как» не в смысле «что она делает», а в смысле «как», то это общепринятая ALU-операция наравне с AND/NOT/whatever.
Re: Операция XOR
runewalsh
Да нет, что XOR делает я знаю. Просто интересно, как именно эта операция в паскальных языках реализуется, на уровне кода. Вот, например, для комплексного числа:
Вот что-то подобное для XOR с целыми числами...
Да нет, что XOR делает я знаю. Просто интересно, как именно эта операция в паскальных языках реализуется, на уровне кода. Вот, например, для комплексного числа:
Код: Выделить всё
operator + (z1, z2: complex) z: complex;
Begin
z.re := z1.re + z2.re;
z.im := z1.im + z2.im;
End;Вот что-то подобное для XOR с целыми числами...
Re: Операция XOR
Код: Выделить всё
R:=A XOR B;Re: Операция XOR
Pavia
Не применение, а реализация.
Не применение, а реализация.
Re: Операция XOR
>это общепринятая ALU-операция наравне с AND/NOT/whatever
— подразумевает, что запись A xor B, где A, B: integer, напрямую мапится в соответствующую процессорную операцию. Обычно её ассемблерная мнемоника так и записывается — xor <регистр>, <регистр или непосредственное значение>. Ты бы ещё спросил, как сложение integer'ов реализовано.
— подразумевает, что запись A xor B, где A, B: integer, напрямую мапится в соответствующую процессорную операцию. Обычно её ассемблерная мнемоника так и записывается — xor <регистр>, <регистр или непосредственное значение>. Ты бы ещё спросил, как сложение integer'ов реализовано.
Re: Операция XOR
Vadim, все основные процессоры нативно поддерживают XOR. Паскаль не реализует её сам, а использует готовую инструкцию.
(Реализовать её можно было бы через другие побитовые операции, например, формулой (A or B) and not (A and B), если бы было нужно.)
(Реализовать её можно было бы через другие побитовые операции, например, формулой (A or B) and not (A and B), если бы было нужно.)
Re: Операция XOR
Дож писал(а):(Реализовать её можно было бы через другие побитовые операции, например, формулой (A or B) and not (A and B), если бы было нужно.)
А вот это как раз интересно. Спасибо за подсказку.
У меня тут такой интересный случай - операции XOR нету и ассемблер (мнемонический) недоступен.
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Re: Операция XOR
Иногда ее реализовывать нужно - множества почему-то не поддерживают такую операцию, хотя реализованы через битовые операции и в принципе с успехом их обычно заменяют.
Re: Операция XOR
Mirage
Да, я как раз подшаманил немного это дело, применяя работу с множествами. Потестировал - вроде результаты от паскалевских целочисленных не отличаются...
Да, я как раз подшаманил немного это дело, применяя работу с множествами. Потестировал - вроде результаты от паскалевских целочисленных не отличаются...
Re: Операция XOR
Божечки, да всё они поддерживают через operator ><.
⇓
Код: Выделить всё
type
MyItem = (ItemA, ItemB, ItemC);
MyItems = set of MyItem;
var
a, b, aXORb: MyItems;
it: MyItem;
begin
a := [ItemA, ItemB];
b := [ItemB, ItemC];
aXORb := a >< b;
for it in aXORb do writeln(it);
end.ItemA
ItemC
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Re: Операция XOR
Увы, в дельфи такого оператора нет. А мне нужен кросскомпиляторный код.
Re: Операция XOR
Delphi 7, XOR работает, даже с Integer. Хотя не должен был...
Какую среду разработки используете?
Какую среду разработки используете?
