Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Разъясните код программы, пожалуйста. (http://forum.oszone.net/showthread.php?t=231411)

Pulemetic 27-03-2012 18:55 1887936

Разъясните код программы, пожалуйста.
 
Есть две функции перевода чисел из десятичной системы счисления в двоичную и из десятичной в шестнадцатеричную.
Мне не понятен сам код программы, объясните какими действиями что мы делаем.
Код программы писал не я, увы :(


function DEC2BIN(DEC: LONGINT): string;

var
BIN: string;
I, J: LONGINT;

begin
if DEC = 0 then
BIN := '0'
else
begin
BIN := '';
I := 0;
while (1 shl (I + 1)) <= DEC do
I := I + 1;
for J := 0 to I do
begin
if (DEC shr (I - J)) = 1 then
BIN := BIN + '1'
else
BIN := BIN + '0';
DEC := DEC and ((1 shl (I - J)) - 1);
end;
end;
DEC2BIN := BIN;
end;


function DEC2HEX(DEC: LONGINT): string;

const
HEXDigts: string[16] = '0123456789ABCDEF';

var
HEX: string;
I, J: LONGINT;

begin
if DEC = 0 then
HEX := '0'
else
begin
HEX := '';
I := 0;
while (1 shl ((I + 1) * 4)) <= DEC do
I := I + 1;
for J := 0 to I do
begin
HEX := HEX + HEXDigts[(DEC shr ((I - J) * 4)) + 1];
DEC := DEC and ((1 shl ((I - J) * 4)) - 1);
end;
end;
DEC2HEX := HEX;
end;

ferget 27-03-2012 19:07 1887941

тут используются битовые операции

но если не понятно, то не используйте этот код, лучше нагуглите примеры с mod и div

lxa85 27-03-2012 20:34 1888004

Да, и в прям витиеватый код.
Pulemetic, Надо идти по шагам, отслеживая изменения переменных. Если лень, то вариант предложенный fergetом:
Цитата:

Цитата ferget
если не понятно, то не используйте этот код, лучше нагуглите примеры с mod и div »



Время: 18:07.

Время: 18:07.
© OSzone.net 2001-