imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 22.06.2004, 21:55     # 1
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
Question Битовые флаги

Подскажите ПЛЗ! Как устроены битовые флаги?
Каким образом в Delphi можно читать/записывать битовые флаги?
И вообще - как в Delphi можно работать с отдельными БИТами, если при чтении потока он выхватывает целиком байт. Например если я хочу прочитать и вывести на Canvas черно-белую BMP-шку (сам ручками без встроеных методов), то там за цвет отвечает БИТ 1-черный - 0-белый (или наоборот ), соответственно в сканлайн нужно засунуть число битов равное ширине картинки.
/7y3uK вне форума  
Старый 28.06.2004, 20:40     # 2
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Посмотри, может поможет чем...
Код:
Const
Bit0 = 1;
Bit1 = 2;
Bit2 = 4;
Bit3 = 8;
Bit4 = 16;
Bit5 = 32;
Bit6 = 64;
Bit7 = 128;
Bit8 = 256;
Bit9 = 512;
Bit10 = 1024;
Bit11 = 2048;
Bit12 = 4096;
Bit13 = 8192;
Bit14 = 16384;
Bit15 = 32768;

procedure SetBit(SetWord, BitNum: Word);
begin
  SetWord:= SetWord or BitNum;     { Устанавливаем бит }
end;

procedure ClearBit(SetWord, BitNum: Word);
begin
  SetWord:= SetWord or BitNum;     { Устанавливаем бит }
  SetWord:= SetWord xor BitNum;    { Переключаем бит   }
end;

procedure ToggleBit(SetWord, BitNum: Word);
begin
  SetWord:= SetWord xor BitNum;    { Переключаем бит   }
end;

function GetBitStat(SetWord, BitNum: Word) : Boolean;
begin
  GetBitStat:= SetWord and BitNum = BitNum { Если бит установлен }
end;
если не хочешь мучиться с константами, то везде BitNum понимать как порядковй номер бита и заменить его на (1 shl BitNum).. так даже красивше вроде..
__________________
Nunc est bibendum
is_absent вне форума  
Старый 28.06.2004, 21:13     # 3
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
Пасибки !! Тока всеравно не понятно как работает буду разбираться...
/7y3uK вне форума  
Старый 29.06.2004, 13:27     # 4
V@nya
Full Member
 
Аватар для V@nya
 
Регистрация: 20.07.2002
Адрес: Находка
Сообщения: 740

V@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царстве
Цитата:
Тока всеравно не понятно как работает
Там всё понятно, используются обычные логические функции, попробуй эти функции разобрать карандашом на бумаге, и увидишь, что всё работает
V@nya вне форума  
Старый 02.07.2004, 17:55     # 5
CEO
Full Member
 
Аватар для CEO
 
Регистрация: 31.08.2003
Адрес: где-то между Марсом и Юпитером
Сообщения: 998

CEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собой
В Delphi есть специальный класс для работы с битами -- TBits. Пример можно посмортеть:
http://www.lib.csu.ru/dl/bases/prg/k...12_upravlenie/
__________________
Старые игры раздают здесь

Последний раз редактировалось CEO; 06.07.2004 в 18:45.
CEO вне форума  
Старый 03.07.2004, 20:34     # 6
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
ceo
извини.. но это же тоже, что и я писал..... я не ругаюсь.. просто присмотрись
__________________
Nunc est bibendum
is_absent вне форума  
Старый 06.07.2004, 18:46     # 7
CEO
Full Member
 
Аватар для CEO
 
Регистрация: 31.08.2003
Адрес: где-то между Марсом и Юпитером
Сообщения: 998

CEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собойCEO Имеются все основания чтобы гордиться собой
Цитата:
is_absent :
извини.. но это же тоже, что и я писал.....
Таки да, извиняюс за плагиат.
CEO вне форума  
Старый 07.07.2004, 02:38     # 8
ARTi
Guest
 
Сообщения: n/a

Цитата:
везде BitNum понимать как порядковй номер бита и заменить его на (1 shl BitNum)
Imho только так. Бит - это бит, и работать с ним косвенно при помощи
Код:
procedure SetBit(SetWord, BitNum: Word);
begin
  SetWord:= SetWord or BitNum;     { Устанавливаем бит }
end;

procedure ClearBit(SetWord, BitNum: Word);
begin
  SetWord:= SetWord or BitNum;     { Устанавливаем бит }
  SetWord:= SetWord xor BitNum;    { Переключаем бит   }
end;

procedure ToggleBit(SetWord, BitNum: Word);
begin
  SetWord:= SetWord xor BitNum;    { Переключаем бит   }
end;

function GetBitStat(SetWord, BitNum: Word) : Boolean;
begin
  GetBitStat:= SetWord and BitNum = BitNum { Если бит установлен }
end;
очень некрасиво по той лишь простой причине, что у любого процессора есть встроенные средства для работы с битами и битовыми полями. Неиспользование этих средств, работа с битами при помощи структур, превращающихся в целые функции, - тогда как можно сделать это и одной специализированной командой процессора (естественно, так это будет выглядеть после компиляции), - богохульство , либо очень и очень исключительный случай (спецзадача).
 
Старый 07.07.2004, 05:04     # 9
helldomain
Administrator
 
Аватар для helldomain
 
Регистрация: 13.05.2002
Сообщения: 11 227

helldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиург
helldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиургhelldomain Демиург
Absoliutno soglasen s utwerjdeniem. Wozmojnoe iskliuchenie: specialnie arhitekturi, wozmojnij primer: JVM.

Цитата:
ARTi:
очень некрасиво по той лишь простой причине, что у любого процессора есть встроенные средства для работы с битами и битовыми полями. Неиспользование этих средств, работа с битами при помощи структур, превращающихся в целые функции, - тогда как можно сделать это и одной специализированной командой процессора (естественно, так это будет выглядеть после компиляции), - богохульство , либо очень и очень исключительный случай (спецзадача).
__________________
Осколки прошлого, как снег, закрутит ураган времён,
В ушедший день для нас навек, обрушив мост,
Оставив в наших душах след, тьма уплывёт за горизонт,
И в чистом небе вспыхнет свет, свет новых звёзд.
helldomain вне форума  


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

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 22:34.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.