2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 Re: C# порядок логичeских операций
Сообщение19.07.2011, 15:25 
Ну вот конкретный пример: программулька, которая ищет в текущем каталоге все файлы с атрибутами "скрытый" и "только для чтения". Обратите внимание на комбинирование целочисленных флажков faReadOnly и faHidden.

код: [ скачать ] [ спрятать ]
Используется синтаксис Delphi
var
    Data: TSearchRec;
    Attributes: Integer;

...

    Attributes:=faReadOnly+faHidden;

    if FindFirst('*.*', Attributes, Data)=0 then
    begin
        repeat
            if Data.Attr and Attributes = Data.Attr then
                MainForm.Filenames.Items.Add(Data.Name);
        until FindNext(Data)<>0;
        FindClose(Data);
    end;
 


N.B., Все флажки типа faReadOnly, faDirectory и т.д. -- суть степени двойки и поэтому "не пересекаются" (побитовое И между любыми двумя флажками дает ноль). :)

 
 
 
 Re: C# порядок логичeских операций
Сообщение20.07.2011, 04:20 
ewert в сообщении #469524 писал(а):
Если байтовые, используемые в роли флажков, то -- можно, но смотрится как-то нелепо.
Об этом и было замечание Circiter'а насчет дельфи-кодеров.
Привычка использовать '+' вместо "or-ed combination" не столько нелепа, сколько опасна: можно случайно включить в сумму константу для комбинации битов. А некоторые (юные?) программисты, копирующие приемы гуру, могут и не понимать, в чем разница.

 
 
 
 Re: C# порядок логичeских операций
Сообщение20.07.2011, 18:49 
Circiter в сообщении #469592 писал(а):
   
Код:
    Attributes:=faReadOnly+faHidden;

Это я в курсе. Но это -- редчайшее исключение, и выигрыша в производительности не даёт.

 
 
 [ Сообщений: 18 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group