![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обращение к битам [D7, WinXP]
ShproTT © (2004-10-20 17:58:00)Всем добрый вечер!
Подскажите как работать с байтом информации по-битно?
В С++ можно работать с битовыми полями, а как в Delphi?
Добрый дядька (2004-10-20 23:28:00) [1]Например, так:
function isBit(const Value,NumBit: Byte): Boolean;
const
ArrBits: array[0..7] of Byte=(1,2,4,8,16,32,64,128);
begin
Result := ((ArrBits[NumBit] and Value)=ArrBits[NumBit]);
end;
function isBitMask(const Value,BitMask: Byte): Boolean;
begin
Result := ((BitMask and Value)=BitMask);
end;
function SetBit(const Value,NumBit: Byte): Byte;
const
ArrBits: array[0..7] of Byte=(1,2,4,8,16,32,64,128);
begin
Result := (ArrBits[NumBit] or Value);
end;
function SetBitMask(const Value,BitMask: Byte): Byte;
begin
Result := (BitMask or Value);
end;
Piter (2004-10-20 23:09:00) [2]Andy BitOff © (20.10.04 23:07) [7]
Если 128 сдвинуть, то восстановить можно
если знать, какое число сдвинул - то восстановить, конечно, можно :)
Andy BitOff (2004-10-20 23:07:00) [3]Хотя я обратил внимание, что написано (128 -> 1). Если 128 сдвинуть, то восстановить можно.
Piter (2004-10-20 23:05:00) [4]XProger © (20.10.04 22:58) [3]
А можно сделать shr 7 и работать с первым битом (128 -> 1) и в конце работы сдвинуть всё обратно shl 7
при сдвиге вправо все правые биты потеряются.
Piter (2004-10-20 23:05:00) [5]ну то есть, не все, а насколько сдвинул
Andy BitOff (2004-10-20 23:02:00) [6]
XProger © (20.10.04 22:58) [3]
P.S.
В последнем могу допустить ошибку :)
Именно.
XProger (2004-10-20 22:58:00) [7]shl shr 8)
1 2 4 8 16 32 64 128 256 ...
1 2 3 4 5 6 7 8 9 ...
Включить 8 бит:
b := b or 128;
Включён ли 8 бит:
b and 128 <> 0
Выключить 8 бит:
b := b and not 128;
А можно сделать shr 7 и работать с первым битом (128 -> 1) и в конце работы сдвинуть всё обратно shl 7
P.S.
В последнем могу допустить ошибку :)
Rem (2004-10-20 18:26:00) [8]Romkin (20.10.04 18:22) [1]
+ xor :))
Romkin (2004-10-20 18:22:00) [9]and or not :))))