Назначение функций hi(x), lo(x), swap(x)


Статья подготовлена автором сайта studentps.narod.ru

Об этих функциях рассказывалось на лекции 9 (8 рктября 2003), но судя по всему мало кто понял. Объясню на конкретных примерах.

Дано шестнадцатеричное число х целого типа (например, longint - числа этого типа принимают значения от -2147483647 до 2147483647, что практически дает нам гарантию на защиту от переполнения, которое видет к ошибке в программе) вида #####, где #-цифра от 0 до F (те. число может выглядеть так: 4FA5D2 или 55).
Шестнадцатеричное число - число записанное комбинацией из 16 цифр (0,1..,9,A,B,C,D), в обычной жизни мы пользуемся десятеричными (используем цифры от 0 до 9).

Тогда "красные" цифры - старший байт аргумента и для их выделения требуется операция hi(x), т.е. следующая программа:

Program Hitest;
var x:longint;
begin
x:=43981;
writeln(hi(x));
end.

Мы присваиваем х десятеричное число 43981, а паскаль переведет его в шестнадцатеричное автоматически. Мы могли бы ввести сразу шестнадцатеричное число, добавив знак доллара перед числом - это указывает Паскалю на ввод шестнадцатеричного числа, т.е. строка присваивания должна была бы выглядеть так:
x:=$ABCD;
В шестнадцатеричном варианте наше число выглядит, как ABCD.

Красные цифры - AB - считаются старшим байтом аргумента, именно они и находятся процедурой hi, т.е. на экране мы увидим 171, т.е. число AB, записанное в десятичной форме..

Синие цифры - младший байт аргумента, для их выведения потребуется операция lo(x). На экране появится десятеричное 205, аналогичное шестнадцатеричному числу CD.;

Операция swap(x) меняет старший и младший байты местами, т.е если в нашей программе заменить hi на swap, то на экране высветится 52651 - десятеричная версия CDAB.

В заключении приведу таблицу конкретных примеров выполнения этих операций (первым в ячейке указано шестнадцатеричное число, вторым - десятеричное):
x:=хlo(x)hi(x)swap(x)
88=88=80=080=128
$1616=2216=220=0160=352
1610=1610=160=0100=256
4571CD=457CD=2051=1CD1=3281
$E8437E8437=95135137=55E84=371637E84=228996
-35FFFFFFFFDD=-35DD=221FFFFFFFF=4294967295DDFFFFFFFF=<слишком большое число>