Цитата(sigmaN @ Apr 18 2008, 01:05)

Неужели это всё может превзойти старые добрые методы?
Может. Например, у того же техасовского TMS320C6x есть такая замечательная инструкция EXT. Она, по сути, заменяет собой две инструкции SHR и AND и служит для извлечения битового поля из регистра.
Если ты скажешь компилятору (путем объявления битовых полей), что один кусок слова - это поле A, а другой - это поле B и если компилятор не дурак (а в большинстве случаев он не дурак), то, скажем, чтение этих полей он будет осуществлять инструкцией EXT. А если ты не скажешь (будешь использовать маски), то вряд ли он догадается.
Существуют также и другие инструкции для манипулирования отдельными битами в словах. И они тоже будут использоваться компилятором.
Однако есть и минусы у такого подхода: стандарт C, если я правильно помню, ничего не говорит на тему того, какие биты слова должны ставиться в соответствие битовым полям. Так, имея два поля шириной 2 и 3 бита и 32-битную архитектуру, им может быть поставленно в соответствие 0-1 и 2-4 биты соотв., а может наоборот: 27-29 и 30-31. Если ты пишешь код, который отлаживаешь на писюке, а потом его же пускаешь на контролер, то тут могут возникнуть нюансы, которые зависят от твоих компиляторов. Но обычно, все же, имеет место здравый смысл, и поля заполняются по мере их объявления, заполняя младшие биты.
Цитата(sigmaN @ Apr 18 2008, 01:05)

Оперативка очень важна. Иду впритык, каждый байт на счету.
В этом смысле оба варианта равнозначны. За тем лишь исключением, что генерируемый код может отличаться по размеру, но тут уже зависит от архитектуры и компилера.
Лично я, там где не критично, юзаю маски - привычнее и, ИМХО, нагляднее чуть-чуть. Где важна производительность, но при этом до асма спускаться лень, юзаю поля.