Как преобразовать числа из одной системы в другую
Двоичные числа важны, потому что компьютер работает c двоичными числами - номера состоят из двух цифр 1 и 0. Шестнадцатеричные числа удобны, потому что они позволяют легко обрабатывать двоичные числа.
Delphi предоставляет множество полезных функций для преобразования целых чисел (в десятичной системе) строковые значения (строка это способ представления шестнадцатеричных и двоичных чисел), и наоборот.
Давайте посмотрим, какие функции можно использовать для преобразования чисел из одной системы в другую, каких функций не хватает и как легко реализовать их в Object Pascal. IntToHex, ObjectPascal.HexToInt.
В модуле SysUtils есть функция IntToHex, которая возвращает шестнадцатиричное представление числа.
function IntToHex (Value: Integer; Digits: Integer): String;
Хорошо, у нас есть возможность преобразовать целое число в шестнадцатеричное, а где функция HexToInt? Функция HexToInt не существует в Delphi?.
Тем не менее, Delphi позволяет использовать шестнадцатиричные выражения (используя префикс $). Вот простая функция HexToInt:
function HexToInt(HexNum: string): LongInt;
begin
Result:=StrToInt('$' + HexNum) ;
end;
Функции IntToBin, BinToInt
Если Вы не знакомы с двоичными числами, то можете почитать Введение в двоичную арифметику.
Таким образом, как организовать функции IntToBin и BinToInt в Delphi. Вот один из примеров:
function IntToBin ( Value: LongInt; Digits: integer ): string;
begin
result := StringOfChar ( '0', Digits ) ;
while Value > 0 do begin
if ( Value and 1 ) = 1 then
result [ Digits ] := '1';
dec ( Digits ) ;
Value := Value shr 1;
end;
end;
function BinToInt(Value: String): LongInt;
var i: Integer;
begin
Result:=0;
// Удаляем ведущие нули
while Copy(Value, 1, 1) = '0' do
Value:=Copy(Value, 2, Length(Value) - 1) ;
// преобразовываем
for i:= Length(Value) downto 1 do
if Copy(Value, i, 1) = '1' then
Result:=Result + (1 shl (Length(Value) - i)) ;
end;
Римские
В большинстве случаев сегодня используется арабская система исчисления. Десять однозначных цифр от 0 до 9, составляют символы нашей системы исчисления. Примером другой системе счисления является система римских цифр, которые могут представлять все числа от 1 до 1000000, используя только семь символов: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000. Пример: 1999 (арабская) является MCMXCIX (римская).
А вот функция для перевода целых арабских чисел в римские:
function IntToRoman(Value: LongInt): String;
const
Arabics: Array[1..13] of Integer = 1,4,
5,9,10,40,50,90,100,400,500,900,1000) ;
Romans: Array[1..13] of String = ('I','IV',
'V','IX','X','XL','L','XC','C','CD','D','CM','M') ;
var
j: Integer;
begin
for j := 13 downto 1 do
while (Value >= Arabics[j]) do begin
Value := Value - Arabics[j];
Result := Result + Romans[j];
end;
end;
Комментарии