| imho.ws |
![]() |
|
|
|
# 1 |
|
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
Подскажите ПЛЗ! Как устроены битовые флаги?
Каким образом в Delphi можно читать/записывать битовые флаги? И вообще - как в Delphi можно работать с отдельными БИТами, если при чтении потока он выхватывает целиком байт. Например если я хочу прочитать и вывести на Canvas черно-белую BMP-шку (сам ручками без встроеных методов), то там за цвет отвечает БИТ 1-черный - 0-белый (или наоборот ), соответственно в сканлайн нужно засунуть число битов равное ширине картинки.
|
|
|
|
|
# 2 |
|
::VIP::
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417
![]() ![]() ![]() |
Посмотри, может поможет чем...
Код:
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;
__________________
Nunc est bibendum |
|
|
|
|
# 5 |
|
Full Member
Регистрация: 31.08.2003
Адрес: где-то между Марсом и Юпитером
Сообщения: 998
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
В Delphi есть специальный класс для работы с битами -- TBits. Пример можно посмортеть:
http://www.lib.csu.ru/dl/bases/prg/k...12_upravlenie/
__________________
Старые игры раздают здесь Последний раз редактировалось CEO; 06.07.2004 в 18:45. |
|
|
|
|
# 8 | |
|
Guest
Сообщения: n/a
|
Цитата:
Код:
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;
, либо очень и очень исключительный случай (спецзадача).
|
|
|
|
# 9 | |
|
Administrator
Регистрация: 13.05.2002
Сообщения: 11 227
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Absoliutno soglasen s utwerjdeniem. Wozmojnoe iskliuchenie: specialnie arhitekturi, wozmojnij primer: JVM.
Цитата:
__________________
Осколки прошлого, как снег, закрутит ураган времён, В ушедший день для нас навек, обрушив мост, Оставив в наших душах след, тьма уплывёт за горизонт, И в чистом небе вспыхнет свет, свет новых звёзд. |
|
|
|