![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Подскажите пожалуйста! Существует ли в принципе тип данных описывающий массив из 8 значений типа да/нет размерностью в 1 байт, если нет то можно ли это как-то реализовать самому?
|
|
#2
|
||||
|
||||
|
Тип Byte
![]() |
|
#3
|
||||
|
||||
|
Т.к. ДА/НЕТ по сути своей булевое значение (TRUE/FALSE) и тип Boolean имеет размерность в 1 БАЙТ, то можно сделать массив размерностью 8 из булевых значений, что прямолинейно отвечает твоим требованиям.
Код:
type TYesNoArray = array[0..7] of Boolean; В этом случае посмотри работу с битами. |
|
#4
|
||||
|
||||
|
Ему нужен однобайтный массив из 8 элементов.
Т.е. SizeOf(чудомассив_из_8_элементов)=1 |
|
#5
|
|||
|
|||
|
Да верно я интересуюсь именно таким массивом.
|
|
#6
|
||||
|
||||
|
Ну если только свое делать.
|
|
#7
|
||||
|
||||
|
Да че там делать:
Код:
TFlagContainer = class
data : byte;
public
procedure setData(id : integer; value : boolean);
function getData(id : integer) : boolean;
end;
procedure TFlagContainer.setData(id : integer; value : boolean);
begin
if id >= 8 then
exit;
data := data and not (1 shl id);
if value then
data := data or (1 shl id);
end;
function TFlagContainer.getData(id : integer) : boolean;
begin
if ((data shr id) and 1) = 1 then
result := true
else
result := false;
end;Код:
TFlagContainer = class data : byte; public procedure setData(id : integer; value : boolean); function getData(id : integer) : boolean; end; procedure TFlagContainer.setData(id : integer; value : boolean); begin if id < 8 then data := data and not (1 shl id) or ((Byte(value) and 1 ) shl id); end; function TFlagContainer.getData(id : integer) : boolean; begin result := ((data shr id) and 1) = 1; end; Последний раз редактировалось Bargest, 19.05.2013 в 00:07. |
|
#8
|
||||
|
||||
|
можно еще немного модифицировать:
Код:
type
IFlagContainer = interface
procedure SetData(ID: Byte; Value: Boolean);
function GetData(ID: Byte): Boolean;
property Value[Index: Byte]: Boolean read GetData write SetData; default;
end;
TFlagContainer = class(TInterfacedObject, IFlagContainer)
private
FData: Byte;
procedure SetData(ID: Byte; Value: Boolean);
function GetData(ID: Byte): Boolean;
end;
{ TFlagContainer }
procedure TFlagContainer.SetData(ID: Byte; Value: Boolean);
begin
FData:=FData and not (1 shl ID) or ((Byte(Value) and 1) shl ID);
end;
function TFlagContainer.GetData(ID: Byte): Boolean;
begin
Result:=((FData shr ID) and 1)=1;
end;использование: Код:
var f: IFlagContainer; i: Integer; begin f:=TFlagContainer.Create; for i:=0 to 7 do f[i]:=(i mod 2)=0; for i:=0 to 7 do if f[i] then Memo1.Lines.Add(IntToStr(i)); end; Destroy объекту не нужен. |