Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #13  
Старый 25.04.2014, 13:39
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Например так:
Биты нумеруются справа с 0 по 31
Код:
function GetBit(Source : Cardinal; Position:Integer):Cardinal;
begin
  Result :=  (Source shr Position) and 1;
end;
function GetNBit(Source : Cardinal; Position:Integer;Count:Integer):Cardinal;
begin
  Result :=  (Source shl ( 31 - Position ));(* сдвигаем в лево, что бы ушли лишние старшие разряды *)
  Result :=  Result shr( 31 - Position - Count -1 );(* сдвигаем в право, что бы ушли лишние младшие разряды *)
end;

procedure SetBit(var Source : Cardinal; Position:Integer; Bit:Byte);
begin
  Mask:=1 shl Position;
  Source :=  Source and not (1 shl Position); // обнуляем битик
  Source :=  Source or  ((Bit and 1) shl Position; // Записываем битик
end;

procedure SetNBit(var Source : Cardinal; Position,Count:Integer; Value:Cardinal);
var
  MaskP: Cardinal;
  MaskN: Cardinal;

begin
  Value := Value shl (Position - Count -1);
  MaskP := ((not 0) shl (32 - Count))shr (31 - Position);
  MaskN:=not MaskP;
  Source := (Source and MaskN) or (Value And maskP);
end;
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:03.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025