Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
ВнизОперация сдвига Найти похожие ветки
← →
impuls (2006-12-25 05:14) [0]Подскажите как в Delphi сделать операцию сдвига (ассемблерные ROL ROP).
Или как решить след задачу есть переменная типа integer или byte, информацию несет не сама переменная а каждий ее бит (как биты в регистре статуса), т.е. нужно сделать из переменной типа byte переменную типа bit, или пусть даже как то вытащить биты поразрядно в переменной типа byte
← →
ors_archangel © (2006-12-25 05:27) [1]Установлен ли бит?
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 shl 1 = 2, 2 shr 1 = 1, 2 or 1 = 3, 3 and 2 = 2, not 0 = 1 shl 31 - 1 (для integerа)
← →
MBo © (2006-12-25 06:55) [2]function Ror(Value, Shift: Integer): Integer;
begin
Result := (Value shr Shift) or (Value shl (32 - Shift))
end;
← →
Sha © (2006-12-25 09:50) [3]> 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));
← →
Loginov Dmitry © (2006-12-25 14:51) [4]Множество различных побитовых операций:
http://fundementals.sourceforge.net/
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.014 c