Как присвоить бит
От: B0FEE664  
Дата: 08.03.13 17:30
Оценка:
Задача похожа на эту
Автор: Vladik
Дата: 15.12.02
, но другие параметры.

параметр
mask_value — либо ноль, либо равен mask
mask — содержит ровно один бит установленный в 1.
надо установить или сбросить соответствующий бит в byte.

Можно ли обойтись без условного оператора?
unsigned char assign_bit(unsigned char byte, unsigned char mask, unsigned char mask_value)
{
  assert(0 != mask);
  assert(mask == mask_value || 0 == mask_value);
  assert(0x01 == mask ||
         0x02 == mask ||
         0x04 == mask ||
         0x08 == mask ||
         0x10 == mask ||
         0x20 == mask ||
         0x40 == mask ||
         0x80 == mask
        );
  
  if ( !mask_value )
    byte &= ~mask;
  else
    byte |= mask;
    
  return byte;
}


Короче, хочу битовую функцию вида:
x ∈ { 0, 1 }

f(x, 0, 0) -> x
f(x, 1, 0) -> 0
f(x, 1, 1) -> 1
f(x, 0, 1) -> undefined
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.