![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Элементарный вопрос по булевской функции
Eugene_T © (2005-10-21 13:56:00)FruiteType - переменная
FRUITE_APPLE = 2
Объясните суть работы следующей функции, что будет возвращать функция при каких значениях и почему.
function GetIsApple: Boolean;
begin
Result := FruiteType and FRUITE_APPLE = FRUITE_APPLE;
end;
Eugene_T (2005-10-21 15:36:00) [1]Благодарю.
ShiFT (2005-10-21 14:39:00) [2]Двоичная математика, работа с битовой логикой
http://www.podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Delphi/Podgoretsky/bits.zip&file_id=app-bits
umbra (2005-10-21 14:39:00) [3]Эта функция определяет, является ли FruiteType яблоком. Пусть
FruiteType = 6. Тогда(FruiteType and FRUITE_APPLE) = FRUITE_APPLE, т.е. 2. Скажем, FruiteType - яблоко конкретного сорта, белый налив там, или яблоко-груша
Zeqfreed (2005-10-21 14:36:00) [4]Eugene_T (21.10.05 14:27) [9]
Обычно так реализуются флаговые типы (незнаю как правильно назвать). Переменная такого типа рассматривается как набор флагов (числовые значения - степени двойки). Добавление флага осуществляется через оператор or (например, Flags := Flags or SomeFlag включает SomeFlag во Flags). Исключение флага - and not (Flags := Flags and not SomeFlag), проверка присутствия флага в переменной - and (if Flags and SomeFlag = SomeFlag). Для понимания того, как все это работает читай про логические операции.
Eugene_T (2005-10-21 14:31:00) [5]
> про побитовые операции читал?
Нет. Можно поподробнее?
clickmaker (2005-10-21 14:31:00) [6]
> Eugene_T (21.10.05 14:29) [11]
почитай в хелпе про побитовые операции
Eugene_T (2005-10-21 14:29:00) [7]2clickmaker
Это не я придумал :)
Не могу разобраться
clickmaker (2005-10-21 14:28:00) [8]
> Eugene_T (21.10.05 14:27) [9]
> Я пытаюсь разобраться в чём смысл именно такого постоения
> условия
про побитовые операции читал?
Eugene_T (2005-10-21 14:27:00) [9]Я пытаюсь разобраться в чём смысл именно такого постоения условия
begin...end (2005-10-21 14:26:00) [10]> umbra © (21.10.05 14:09) [3]
> Эта функция попределяет, имеет ли переменная FruiteType
> значение FRUITE_APPLE.
?!
clickmaker (2005-10-21 14:25:00) [11]
> Почему тогда не сделать
> Result := FruiteType = FRUITE_APPLE ?
Ты у нас спрашиваешь? Тебе виднее, как сделать. Может у тебя там фрукт мутант, помесь яблока с апельсином
Jeer (2005-10-21 14:24:00) [12]Eugene_T (21.10.05 14:15) [5]
Это ты у нас спрашиваешь ?
Eugene_T (2005-10-21 14:15:00) [13]2Umbra
Почему тогда не сделать
Result := FruiteType = FRUITE_APPLE ?
Eugene_T (2005-10-21 14:10:00) [14]FruiteType: Byte
umbra (2005-10-21 14:09:00) [15]
> function GetIsApple: Boolean
Эта функция попределяет, имеет ли переменная FruiteType значение FRUITE_APPLE. Может, так понятней?
Result := (FruiteType and FRUITE_APPLE) = FRUITE_APPLE;
Jeer (2005-10-21 14:00:00) [16]Начни со старшинства операций и пройдись по ним в нужном порядке.
Кроме того, не сказано, что за тип переменной FruiteType - может string ?
Digitman (2005-10-21 14:00:00) [17]
> при каких значениях
в дан.случае - по барабану при каких.