gcc 4.7.2
c89
Здравствуйте,сравнивающие битовые операторы
enum message_e {
SIP_CONNECTED = 1 << 0,
CALL_ACCEPTED = 1 << 1
};
Установка битов в разных частях моего кода:
channel->base.message |= CALL_ACCEPTED;
channel->base.message |= SIP_CONNECTED;
Позже я хочу, чтобы проверить, чтобы убедиться, что оба бита:
if((channel->base.message & SIP_CONNECTED) && (channel->base.message & CALL_ACCEPTED)) {
/* IF BOTH BITS ARE SET CALL_ACCEPTED and SIP_CONNECTED */
}
Я только хочу провалить утверждение if если ТОЛЬКО эти биты установлены. Если CALL_ACCEPTED установлен, а SIP_CONNECTED - нет, и наоборот.
Однако, похоже, он попадает в оператор if, если установлен только один из них.
Большое спасибо за любые предложения,
Каковы значения этих параметров? – cnicutar
Что-то не так с вашей программой не в коде, который вы опубликовали. –
Предполагая, что это разные битовые множества, которые не имеют перекрытия, этот код является правильным. Каковы значения этих бит-масок? – WhozCraig