![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Управление битами [D6, Win95/98, Win2k]
kerkonst © (2002-08-27 12:14:00)Здраствуйте все ! Не подскажите ли следущее:
я точно помню, что в Delphi есть тип, представляющий собой что-то типа битовой структуры. Но в help-e его название найти не могу (руки, видать, того...). Вот оно собственно и ищется.
Прим: TBits не подходит. Там поля имеют тип Booleаn.
Alx2 (2002-08-27 13:22:00) [1]:)
kerkonst (2002-08-27 12:55:00) [2]>Alx2
Сорри, переработал видимо... .В отпуск пора....
kerkonst (2002-08-27 12:53:00) [3]>Alx2
Пересечение - and
Объединение - or- наверно, всетки наоборот
Alx2 (2002-08-27 12:47:00) [4]>PVOzerski © (27.08.02 12:38)
Конечно, для серьезного дела - только регистровые операции :)
Но и работа со множествами в Delphi хорошо оптимизирована.
Собственно, множества в Delphi основаны на битовых операциях.
Пересечение - and
Объединение - or
Дополнение - not
Skier (2002-08-27 12:43:00) [5]>kerkonst
Кроме TBits для работы с битами (насколько я помню)
больше ничего нет...
kerkonst (2002-08-27 12:41:00) [6]>PVOzerski
Незнаю как остальные, я ничего придумывать и не собираюсь. Я хочу узнать название существующего типа.
PVOzerski (2002-08-27 12:38:00) [7]Ребята, Вы простите, но в данном случае набор доступных команд процессора от языка программирования не зависит. Pascal, С++, Fortran - всё это суть "надстройка" над машинным кодом, и ничего с бОльшими возможностями, чем Вам предоставляет процессор, Вы на самом деле не придумаете. Нет у Вас других средств работать с битами, чем те, что изложены выше. Вариант Alx2 © (27.08.02 12:29) мне нравится, но ведь на самом деле это тоже "оболочка" и, скажем, по скорости "откровенные" битовые операции он не превысит. Хотя по наглядности он хорош, IMHO.
kerkonst (2002-08-27 12:35:00) [8]>Skier
Согласен, так можно. Но вопрос-то не так стоял. Реализовать самостоятельно такой тип можно. И даже легко. Но я точно помню, что что-то такое уже есть. И просил напомнить его название
Alx2 (2002-08-27 12:29:00) [9]Var
Value : integer
Bits : set of 0..31 absolute Value;
begin
Bits := []; // Все биты Value - нулевые
Bits := [0,1,3]; // 0-й, 1-й и 3-й бит Value - единицы.
end;
Только
Skier (2002-08-27 12:28:00) [10]>kerkonst
А я про что !?
BitIsOn(const AValue : Cardinal; const ABitNum : Byte) : Boolean;
AValue - чем тебе не "массив" из 32 битов ?
ABitNum - чем тебе не обращение к "массиву" из 32 битов по индексу ?
kerkonst (2002-08-27 12:24:00) [11]>Skier
Это не подходит. Необходимо
1) побитовый доступ (желательно, как в массиве, по индексу)
2) возможность обратится к структуре целиком для побитовых операций (shr,xor,..) без написания своей реализации для каждой операции
Ученик (2002-08-27 12:21:00) [12]Может Set of ... ?
Skier (2002-08-27 12:20:00) [13]>murza
Достаточно shl, or, and, not :)
murza (2002-08-27 12:18:00) [14]Вручную. Как у вас там, в дельфях-то? xor,or,not,shl,shr
Skier (2002-08-27 12:17:00) [15]>kerkonst
Могу предложить написать три функции
BitIsOn(...) - установлен ли бит
TurnBitOn(...) - установить бит
TurnBitOff(...) - сбросить бит