С аппаратной точки зрения я бы сказал, что в общем случае все битовые маски и другие операции в лучшем случае могут происходить в течение одного такта (в результате ничего не изменится), но это полностью зависит от аппаратного уровня, который вы, вероятно,никогда не буду знать специфику, и поэтому вы не можете рассчитывать на это.
Стоит отметить, что такие вещи, как .NET system.collections.bitarray
, используют 32-битный целочисленный массив для хранения своих битовых данных.Вероятно, есть причина производительности за этой реализацией (даже если только в общем случае, когда 32-битные слова работают выше среднего), я бы посоветовал прочитать о внутренней работе, которая может быть показательной.
С точки кодированияс точки зрения, это действительно зависит от того, что вы собираетесь делать с битами потом.То есть, если вы собираетесь хранить ваши данные в логических значениях, таких как:
bool a0, a1, a2, a3, a4, a5, a6, a7;
А затем в своем коде вы сравниваете их один за другим (и большинство из них вместе):
if ( a0 && a1 && !a2 && a3 && !a4 && (!a5 || a6) || a7) {
...
}
Тогда вы обнаружите, что будет быстрее (и, вероятно, точнее в коде) использовать битовую маску.Но на самом деле единственный раз, когда это будет иметь значение, это если вы собираетесь запускать этот код миллионы раз в высокопроизводительной или критичной ко времени среде.делайте все, что говорят ваши стандарты кодирования (и если у вас их нет или они не учитывают такие подробности, просто делайте то, что выглядит наиболее подходящим для вашего приложения и потребностей).
Но я настоятельно рекомендую попытаться осмотретьсяи прочитайте блог или два, объясняющие внутреннюю работу .NET system.collections.bitarray
.