Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Помогите разобрать кусочек программы


Автор: beepbeep 24.12.2009, 15:58
Код

var
 key:string;
 intkey,i:integer;
 tmp:byte;
begin
 key:= '10101';
 intkey:=0;
 for i:=1 to length(key) do
  intkey:=intkey+(strtoint(key[i])*(Round(power(2,length(key)-i))));
 Reset(input);
 Rewrite(output);
 while not eof(input) do
  begin
   read(input,tmp);
   for i:=7 downto 0 do
    begin
     if (intkey and (1 shl (length(key)-1))<>0) then 
       tmp:=tmp xor (1 shl i);                          
     intkey:=intkey shl 1;
     if (intkey and (1 shl length(key))<>0) then      
       intkey:=intkey or 1;                              
    end;
   write(output,tmp);
  end;
  closeFile(output);
  closeFile(input);
  Memo1.Lines.LoadFromFile(SaveDialog1.FileName);


Больше всего интересует вот эта часть:
Код

  for i:=7 downto 0 do
    begin
     if (intkey and (1 shl (length(key)-1))<>0) then 
       tmp:=tmp xor (1 shl i);                          
     intkey:=intkey shl 1;
     if (intkey and (1 shl length(key))<>0) then      
       intkey:=intkey or 1;                              
    end;


Пожалуйста помогите разобраться :(

Автор: ~FoX~ 24.12.2009, 16:21
beepbeep, Используйте теги кода
and - битовое умножение (И)
shl - смещение влево на количество указанных бит
xor - исключающие или
or - битовове или

Код

  for i:=7 downto 0 do //Цикл от 7 до 0 
    begin  //поехали
     if (intkey and (1 shl (length(key)-1))<>0) then //если intkey И(*) 01 смещенное на длину key-1 влево, не равно 0 то
       tmp:=tmp xor (1 shl i);                          // tmp = tmp исключающие  (000001 смещенное на i влево)
     intkey:=intkey shl 1;                            //intkey = результату смещения intkey на 1 влево
     if (intkey and (1 shl length(key))<>0) then      //если intkey И(*) 01 смещенное на длину key влево, не равно 0 то
       intkey:=intkey or 1;                              //intkey = intkey + 1(в двоичной системе)
    end;

Автор: beepbeep 24.12.2009, 16:38
За тэги извиняюсь, а за ответ - большое спасибо

Автор: Juice 24.12.2009, 22:48
А если не секрет, что из ответа понятно?

Автор: beepbeep 25.12.2009, 00:52
никто и не писал, что из ответа что-то понятно ))) спасибо за сам факт - что хоть что-то и кто-то ответил. Разобрался позже сам.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)