Я пытаюсь проверить бит в значении флагов, флаги которого могут быть объединены вместе. До сих пор я использую этотПроверка флаги бит
if ((someclass.flags | CONST_SOMEFLAG) == someclass.flags)
, чтобы проверить, если его истинным или ложным, но есть более «элегантный» способ сделать это?
Это может не работать, если 'sizeof (flags)> sizeof (long)', например 64-битное слово с 32-разрядной компиляцией. Причина, являющаяся результатом побитовой математики, будет оцениваться как «int», которая усечет биты верхнего порядка и, таким образом, оценит как «false». –
См. Спецификацию c99, 6.3.1.8p2. Если два операнда бинарного оператора представляют собой два разных целочисленных размера, то меньший продвигается с сохранением значения до размера большего. –
К сожалению, есть много компиляторов c89, которые не соответствуют требованиям. –