Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
22-12-2008 03:14
Помоему код уже нет необходимости оптимизировать
Почему же? Вроде оптимизация кода никогда не считалась излишней.
>>>специально сидел с калькулятором считал чтобы никому небыло понятно?
Да, совсем я обленился. А вот насчет ассемблера не уверен. Помоему код уже нет необходимости оптимизировать.
Странно даже, что приходится объяснять такие простые вещи
Это все в общем-то и так ясно. Я поднял этот вопрос к тому, что стоит ли усложнять простые вещи, решаемые с помощью обычных логических операций.
19-12-2008 11:59 | Комментарий к предыдущим ответам
>>>А если написать их на ассемблере, то быстродействие будет максимальным
Если используется Delphi 2006 и выше, то наиболее оптимальным в этом случае будет использование inline. К сожалению, компилятор так и не научился вставлять код на ассемблере как inline.
Ага, я тоже согласен что такое лучше делать через классы.
А насчет констант в последнем примере ... специально сидел с калькулятором считал чтобы никому небыло понятно? Ведь подобные константы лучше всего и наглядней выражать в шестнадцатеричном виде!
Например, "00000011 11100000" запишется как $03E0 и сразу видно что к чему а не непонятное число 992.
Затем, что это обеспечивает инкапсуляцию данных. Методы оказываются привязаны к данным, а прямая модификация данных в обход обрабатывающих их алгоритмов извне невозможно, что повышает безопасность. Странно даже, что приходится объяснять такие простые вещи.
Ну зачем же так усложнять и делать класс? Ведь можно написать всего-навсего несколько процедур, как у 0nni, которые будут выбирать и возвращать нужные биты. А если написать их на ассемблере, то быстродействие будет максимальным.
да-да.. я уже понял.. просто раньше писал на си, там была возможность создания таких структур, вот по аналогии и искал что-то подобное в делфи.. а надо было в другом направлении думать..
Такой объект определить не получится, в Delphi нет битовых полей. Можно сделать класс-обёртку над Word, который будет содержать свойства a1, a2 и a3 и работать с ними через сеттеры. Что-то типа такого (пример для a2):
type
TWordWrapper = class
private
FB:Word;
function GetA2: Integer;
procedure SetA2(Value: Integer);
publuc
property B: Word read FB write FB;
property A: Integer read GetA2 write SetA2;
end;
function TWordWrapper.GetA2: Integer;
begin
Result := (FB and $03E0) shr 5;
end;
procedure TWordWrapper.SetA2(Value: Integer);
begin
if (value < 0) or (value > 31) then
raise Exception.Create('Выход за пределы диапазона');
FB := (FB and $FC1F) or (value shl 5);
end;
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.