Архив исходников программ, модулей и компонентов на Delphi


Начальная страница

Поиск по базе



Операционная система
Настройка приложения
Взаимодействия приложений
Файлы и директории
Строки и символы
Математика
Базы данных
Интернет и сеть
Мультимедиа
Аппаратная часть
VCL
Другие разделы [0]
 

Количество записей в базе - 537
Сегодня добавлено – 0

Вычисления



Вернуться к списку функций
 Извлечение числа из битовой записи

 Прислал: Elen ( 1 сентября 2006 г. )
©  Собственная разработка
 Описание:
Данная функция работает следующим образом :
предположим есть число 381. его битовая маска 101111101
и предположим из этой маски нужно выделить биты с 3-го по 5-й (т.е. 111)
это производится так : BitsToNum(381,3,5).

Таким образом можно рассматривать любое число (DWORD) как упакованный record (наподобие того как это сделано в Асме), из которого нужно получать значения полей. например : Есть число, которое рассматривается как запись

Поля Описание
1-3 биты : номер по порядку
4-25 биты :число, ассоциированное с этим номером

извлечение производится так :
numb:=BitsToNum(<число>,1,3);
code:=BitsToNum(<число>,4,25);

Так же можно проверить установлен ли бит с номером N (начинается отсчет с 0-го бита) :

if BitsToNum(<число>,3) then 3-й бит установлен

 Зависимости:
нет

 Ограничения:
проверено D6 на Win оси

 Исходный текст:
{ **** UBPFD *********** by http://kladovka.net.ru/delphibase/ ****
>> Извлечение числа из битовой записи

Данная функция работает следующим образом :
предположим есть число 381. его битовая маска 101111101
и предположим из этой маски нужно выделить биты с 3-го по 5-й (т.е. 111)
это производится так : BitsToNum(381,3,5).

Таким образом можно рассматривать любое число (DWORD) как упакованный record (наподобие того как это сделано в Асме), из которого нужно получать значения полей. например : Есть число, которое рассматривается как запись

Поля Описание
1-3 биты : номер по порядку
4-25 биты :число, ассоциированное с этим номером

извлечение производится так :
numb:=BitsToNum(<число>,1,3);
code:=BitsToNum(<число>,4,25);

Так же можно проверить установлен ли бит с номером N (начинается отсчет с 0-го бита) :

if BitsToNum(<число>,3) then 3-й бит установлен

Зависимости: нет
Автор:       Elen
Copyright:   Собственная разработка
Дата:        1 сентября 2006 г.
***************************************************************** }

//********** FUNCTION **********
function BitsToNum;
const bit:ARRAY[0..31] of DWORD
  = ($1,$2,$4,$8,$10,$20,$40,$80,$100,$200,$400,$800,$1000,$2000,$4000,$8000,
     $10000,$20000,$40000,$80000,$100000,
     $200000,$400000,$800000,$1000000,
     $2000000,$4000000,$8000000,$10000000,$20000000,$40000000,$80000000);
begin
 result:=(bit[CountBit]-1) and (source shr frombit);
end;
//********** END FUNCTION ******

 Пример использования:
procedure TForm1.FormCreate(Sender: TObject);
begin
caption:=BitsToNum(381, //число, из которого извлекается инфа
                     3, // начиная с 3-го бита от 0
                     5);// до 5-го бита
end;


Вернуться к списку функций

Наверх ▲