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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2012, 16:08   #1
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию XOR (Delphi)

Всем привет!
Объясните пожалуйста что делает эта строка
Код:
Result[I] := Char(Byte(a) xor (key shr 8));
тут понял
Код:
Char(Byte(a)
тут тоже понял
Код:
(key shr 8));
тут не понятно
Код:
Char(Byte(a) xor (key shr 8));

Последний раз редактировалось Начинающий програм; 21.12.2012 в 16:17.
Начинающий програм вне форума Ответить с цитированием
Старый 21.12.2012, 16:23   #2
Aranea tela telam
Пользователь
 
Аватар для Aranea tela telam
 
Регистрация: 11.01.2012
Сообщений: 51
По умолчанию

1. Выполняет булево или логическое 'Исключающее - или' двух логических значений. Если они различны, то результат истинен.

2. Выполняет математическое 'Исключающее - или' двух целых чисел. Результат поразрядное 'Исключающее - или' этих двух чисел. Например:

10110001 Xor 01100110 = 11010111

Пример
Код:
var
  num1, num2, num3 : Integer;
  letter           : Char;

begin
  num1   := $25;    // Бинарное значение  : 0010 0101   $25
  num2   := $32;    // Бинарное значение  : 0011 0010   $32
                    // Значение после XOR : 0001 0111 = $17
  letter := 'G';

  // И используемый для возвращения Булева значения
  if (num1 > 0) Xor (letter = 'G')
  then ShowMessage('Только одно из значений истинно')
  else ShowMessage('Оба значения истины');

  // И используемый для выполнения математической операции Xor
  num3 := num1 Xor num2;

  // Показ результата
  ShowMessageFmt('$25 Xor $32 = $%x',[num3]);
end;
Я учусь на своих ошибках, но порой их слишком много
Aranea tela telam вне форума Ответить с цитированием
Старый 21.12.2012, 16:34   #3
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Большое спасибо!

Еще один вопрос почему в компилятор выдает ошибку? Как это исправить?
Код:
function Encode(s:string; key:word):string;
var
  i:byte;
begin
  result[0]:=s[0];//выдает ошибку
  for i:=1 to length(s) do
    begin
      result[i]:=char(byte(s[i]) xor (key shr 8));
      key:=(byte(result[i])+key)
    end
end;

function Decode(s:string; key:word):string;
var
  i:byte;
begin
  result[0]:=s[0];
  for i:=1 to length(s) do
    begin
      result[i]:=char(byte(s[i]) xor (key shr 8));
      key:=(byte(s[i])+key)
    end
end;

var
  s:string;
begin
  writeln('Введите сообщение: ');
  readln(s);
  s:=Encode(s,12345);
  writeln(s);
  s:=Decode(s,12345);
  writeln(s)
end.

Последний раз редактировалось Stilet; 21.12.2012 в 17:05.
Начинающий програм вне форума Ответить с цитированием
Старый 21.12.2012, 17:05   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У строки в Делфи нет нулевой позиции.
result[1]:=s[1];
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.12.2012, 17:05   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Строки индексируются с 1 в дельфи, а не с 0

пс. надо ввести секунды в дату поста ) чтобы отслеживать насколько кто кого опередил )) Как Stilet меня сейчас )
phomm вне форума Ответить с цитированием
Старый 21.12.2012, 17:34   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
чтобы отслеживать насколько кто кого опередил
Это не поможет. Локали у каждого разные могут быть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.12.2012, 18:31   #7
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Спасибо за ответ!
Начинающий програм вне форума Ответить с цитированием
Старый 22.12.2012, 06:52   #8
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Еще вопрос по этому коду, объясните пожалуйста для чего сдесь нужна константа key ?

Код:
const
  key=12345;

function Encode(s:string; key:word):string;
var
  i,j:byte;
begin
  result[0]:=s[0];
  for i:=1 to length(s) do               //s='abcd'
    begin
      result[i]:=char(byte(s[i]) xor (key shr 8));
      key:=(byte(result[i])+key)
    end
end;
Начинающий програм вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c Xor frommars Общие вопросы C/C++ 4 03.10.2012 18:30
XOR для текста и бинарного потока (Delphi) Tomogochi Помощь студентам 13 18.05.2012 23:51
xor шифрование (delphi) CAMOBAP Помощь студентам 16 11.01.2011 00:02
алгоритм XOR ravmad Общие вопросы C/C++ 2 29.05.2009 21:21