Задача похожа на
этуАвтор: 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