Pulemetic
27-03-2012, 18:55
Есть две функции перевода чисел из десятичной системы счисления в двоичную и из десятичной в шестнадцатеричную.
Мне не понятен сам код программы, объясните какими действиями что мы делаем.
Код программы писал не я, увы :(
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;
Мне не понятен сам код программы, объясните какими действиями что мы делаем.
Код программы писал не я, увы :(
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;