Один из способов:
Цитата
Переписываем исходную последовательность битов числа справа налево до первой единицы, включая ее. Остальные биты заменяем их дополнениями (инвертируем).
Читаем строку справа налева. Если очередной символ '0', то ничего с ним не делаем. Иначе применяем к этому символу функцию FirstOne {вообще-то удобнее былобы её процедурой сделать, ну да ладно...} и затем ко всем ещё непрочитанным символам строки применяем функцию InvertHex.
Это всё для положительного числа. Для отрицательного легче: просто убрать минус, а к первому слева символу применить операцию Plus8 (этим самым заменяя старший бит с нуля на единицу)
Код
function InvertHex(ch:char):char;
begin
case ch of
'0': InvertHex:='F';
'1': InvertHex:='E';
'2': InvertHex:='D';
'3': InvertHex:='C';
'4': InvertHex:='B';
'5': InvertHex:='A';
'6': InvertHex:='9';
'7': InvertHex:='8';
'8': InvertHex:='7';
'9': InvertHex:='6';
'A': InvertHex:='5';
'B': InvertHex:='4';
'C': InvertHex:='3';
'D': InvertHex:='2';
'E': InvertHex:='1';
'F': InvertHex:='0';
end;
end;
function FirstOne(ch:char):char;
begin
case ch of
'1': FirstOne:='F';
'2': FirstOne:='E';
'3': FirstOne:='D';
'4': FirstOne:='C';
'5': FirstOne:='B';
'6': FirstOne:='A';
'7': FirstOne:='9';
'8': FirstOne:='8';
'9': FirstOne:='7';
'A': FirstOne:='6';
'B': FirstOne:='5';
'C': FirstOne:='4';
'D': FirstOne:='3';
'E': FirstOne:='2';
'F': FirstOne:='1';
end;
end;
function Plus8(ch:char):char;
begin
case ch of
'0': Plus8:='8';
'1': Plus8:='9';
'2': Plus8:='A';
'3': Plus8:='B';
'4': Plus8:='C';
'5': Plus8:='D';
'6': Plus8:='E';
'7': Plus8:='F';
end;
end;
{когда писал, ещё не видел ответа volvo }