- Сколько надо программистов, чтобы ввинтить электрическую лампочку?
- Два - один ввинчивает, а другой устрашающе стоит рядом с дубиной, чтобы не побежал ток.
function IntToBin(Value: LongInt; Size: Integer): string;
var
i: Integer;
begin
Result := '';
for i := Size downto 0 dobeginif Value and (1 shl i) <> 0 thenbegin
Result := Result + '1';
endelsebegin
Result := Result + '0';
end;
end;
end;
function BinToInt(Value: string): LongInt;
var
i, Size: Integer;
begin
Result := 0;
Size := Length(Value);
for i := Size downto 0 dobeginif Copy(Value, i, 1) = '1' thenbegin
Result := Result + (1 shl i);
end;
end;
end;
Программные функции для преобразования между двоичными и десятичными числами!
Функция IntToBin
Эта функция принимает значение типа LongInt и целочисленное значение Size в качестве входных параметров и возвращает строковое представление значения в двоичной системе счисления.
Вот что она делает:
Результат initializes to an empty string ('').
Цикл iterates from Size down to 0 (inclusive). Это означает, что если Size равно 8, например, цикл будет выполняться 8 раз.
Внутри цикла:
Она проверяет, имеет ли значение бит в позиции i с помощью оператора bitwise AND (Value and 1 shl i). Если это условие истинно, то это означает, что бит в позиции i установлен в двоичном представлении значения.
Если бит установлен, она добавляет '1' к результату; иначе, она добавляет '0'.
Функция возвращает полученный двоичный строковый результат.
Функция BinToInt
Эта функция принимает двоичную строку в качестве входного параметра и возвращает ее десятичное эквивалентное значение типа LongInt.
Вот что она делает:
Результат initializes to 0.
Цикл iterates from the length of the input string (Size) down to 0 (inclusive). Это означает, что если входная строка имеет 8 символов, например, цикл будет выполняться 8 раз.
Внутри цикла:
Она извлекает одиночный символ из входной строки с помощью Copy(Value, i, 1).
Если этот символ равен '1', она добавляет значение бита в позиции i к результату (используя (1 shl i)). Это эффективно смещает двоичное представление значения влево на i позиций и добавляет 1.
Функция возвращает полученное десятичное значение.
Альтернативное решение
Хотя эти функции работают корректно, есть более компактный способ их реализации с помощью встроенных функций строкового манипулирования Delphi: для IntToBin можно использовать функцию IntToBin из модуля SysUtils, а для BinToInt - цикл с помощью процедуры Read из модуля StrUtils.
Данная статья описывает функции в языке Паскаль для преобразования двоичного числа в десятичное и наоборот, а также сопровождается шуткой о программистах, которые пытаются ввинтить электрическую лампочку.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.