Установка бита
dlya cheqo eto nujno vobshem? v kakix situasiyax polezno? esli mojno, pokajite v malenkoy proqramme ispolzovaniye
Цитата:
Originally posted by kuma
dlya cheqo eto nujno vobshem? v kakix situasiyax polezno? esli mojno, pokajite v malenkoy proqramme ispolzovaniye
dlya cheqo eto nujno vobshem? v kakix situasiyax polezno? esli mojno, pokajite v malenkoy proqramme ispolzovaniye
Дял чего? Да много для чего. Чтобы потом проверить, например...
Цитата:
Originally posted by wanja
Дял чего? Да много для чего. Чтобы потом проверить, например...
Дял чего? Да много для чего. Чтобы потом проверить, например...
a qde primer? :)
Цитата:
Originally posted by kuma
a qde primer? :)
a qde primer? :)
Посмотри в хелпе справку о TColor. Там не совсем биты (хотя как посмотреть), но тоже из этой оперы.
Цитата:
Originally posted by Sagittarius
Посмотри в хелпе справку о TColor. Там не совсем биты (хотя как посмотреть), но тоже из этой оперы.
Посмотри в хелпе справку о TColor. Там не совсем биты (хотя как посмотреть), но тоже из этой оперы.
Ну, например, обращал(а) ли ты внимание на то ,ч то у всяких WINAPI (и не только) процедур, опции задаются через or? Почему, как ты думаешь?
Цитата:
Originally posted by wanja
Ну, например, обращал(а) ли ты внимание на то ,ч то у всяких WINAPI (и не только) процедур, опции задаются через or? Почему, как ты думаешь?
Ну, например, обращал(а) ли ты внимание на то ,ч то у всяких WINAPI (и не только) процедур, опции задаются через or? Почему, как ты думаешь?
Даже и не WinAPI:
Код:
S := TFileStream.Create('Test1.txt', fmOpenRead or fmShareDenyWrite);
Цитата:
Originally posted by Freeman
Даже и не WinAPI:
Даже и не WinAPI:
Код:
S := TFileStream.Create('Test1.txt', fmOpenRead or fmShareDenyWrite);
Ну, допустим у твоей функции(или не твоей) есть много булевских опций. Тогда ысем им даешь один параметр, устанавливаешь.сбрасывешь соответствующие биты и вперед.
Цитата:
Originally posted by kuma
dlya cheqo eto nujno vobshem? v kakix situasiyax polezno? esli mojno, pokajite v malenkoy proqramme ispolzovaniye
dlya cheqo eto nujno vobshem? v kakix situasiyax polezno? esli mojno, pokajite v malenkoy proqramme ispolzovaniye
В Дельфи, ИМХО, лучше пользоваться множествами. И понятнее, и гемора меньше. Кстати все компоненты так и реализованы. Сравним:
1. Код с битовыми полями
Код:
const
Option1 = 1;
Option2 = 2;
Option3 = 4;
procedure MyProc(Options: byte);
begin
if (Options and Option1) = Option1 then ...
...
end;
// Вызов процедуры
MyProc(Option1 or Option2);
Option1 = 1;
Option2 = 2;
Option3 = 4;
procedure MyProc(Options: byte);
begin
if (Options and Option1) = Option1 then ...
...
end;
// Вызов процедуры
MyProc(Option1 or Option2);
2. Код с множествами
Код:
type
TMyOption = (Option1, Option2, Option3);
TMyOptions = set of TMyOptions;
...
procedure MyProc(Options: TMyOptions);
begin
if Option1 in Options then ...
...
end;
// Вызов процедуры
MyProc([Option1, Option2]);
TMyOption = (Option1, Option2, Option3);
TMyOptions = set of TMyOptions;
...
procedure MyProc(Options: TMyOptions);
begin
if Option1 in Options then ...
...
end;
// Вызов процедуры
MyProc([Option1, Option2]);
Например, если N-ый бит стоит в нуле, значит этот параметр False, иначе - True
Код:
const
Par1 = $0000001
Par2 = $1000000
Par3 = $0001000
begin
ParMixed := Par1 or Par3; // $0001001
....
Parameter1 := Boolean(StrToInt(IntToStr(ParMixed)[8]));
Parameter2 := Boolean(StrToInt(IntToStr(ParMixed)[1]));
Par1 = $0000001
Par2 = $1000000
Par3 = $0001000
begin
ParMixed := Par1 or Par3; // $0001001
....
Parameter1 := Boolean(StrToInt(IntToStr(ParMixed)[8]));
Parameter2 := Boolean(StrToInt(IntToStr(ParMixed)[1]));
З.Ы.: С множествами проще ))