Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Элементарный вопрос по булевской функции


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]


> при каких значениях


в дан.случае - по барабану при каких.


Наверх

Титульная страница Поиск, карта сайта Написать письмо