Назначение функций 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) 8 8=8 8=8 0=0 80=128 $16 16=22 16=22 0=0 160=352 16 10=16 10=16 0=0 100=256 457 1CD=457 CD=205 1=1 CD1=3281 $E8437 E8437=951351 37=55 E84=3716 37E84=228996 -35 FFFFFFFFDD=-35 DD=221 FFFFFFFF=4294967295 DDFFFFFFFF=<слишком большое число>