Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Операция сдвига [D7, ME, 2000, XP]


impuls ©   (2006-12-25 05:14:00) 

Подскажите как в Delphi сделать операцию сдвига (ассемблерные ROL ROP).
Или как решить след задачу есть переменная типа integer или byte, информацию несет не сама переменная а каждий ее бит (как биты в регистре статуса), т.е. нужно сделать из переменной типа byte переменную типа  bit, или пусть даже как то вытащить биты поразрядно в  переменной типа byte


Loginov Dmitry   (2006-12-25 14:51:00) [1]

Множество различных побитовых операций:
http://fundementals.sourceforge.net/


Sha   (2006-12-25 09:50:00) [2]

> ors_archangel ©   (25.12.06 05:27) [1]
> ... not 0 = 1 shl 31 - 1 (äëÿ integerà)


Попробуй это :)

 i:=0;
 ShowMessage(IntToStr(not i));
 i:=1;
 i:=i shl 31 - 1;
 ShowMessage(IntToStr(i));


MBo   (2006-12-25 06:55:00) [3]

function Ror(Value, Shift: Integer): Integer;
begin
 Result := (Value shr Shift) or (Value shl (32  - Shift))
end;


ors_archangel   (2006-12-25 05:27:00) [4]

Установлен ли бит?

function GetBit(flags: cardinal; bit: integer): integer;
begin
 result := (flags shr bit) and 1;
end;

Установить бит!

procedure SetBit(var flags: cardinal; bit: integer);
begin
 flags := flags or (1 shl bit);
end;

Сбросить бит!

procedure ClearBit(var flags: cardinal; bit: integer);
begin
 flags := flags and not (1 shl bit);
end;

Здесь bit - это номер бита 0..31, GetBit возвращает 0 или 1. Использованы здесь побитовые операторы: shr(сдвиг вправо), shl(влево), or(побитное или), and(и) и not(не), например 1 shl1 = 2, 2 shr1 = 1, 2 or1 = 3, 3 and2 = 2, not0 = 1 shl31 - 1 (для integerа)


Наверх

Титульная страница Поиск, карта сайта Написать письмо