помогите логическую функцию написать
Добавлено: Чт янв 19, 2012 11:23:52
задан байт unsigned char flagi
нужно сделать ТАК:
если нулевой и первый бит разные то нулевому биту присваиваем значение первого бита
все остальные биты (2-7) должны остаться неизменными
использовать еще один байт для вычислений крайне нежелательно
как это сделать??
пример
flagi=0b xxxx xx01 результат 0b xxxx xx00
flagi=0b xxxx xx10 результат 0b xxxx xx11
flagi=0b xxxx xx00 результат 0b xxxx xx00
flagi=0b xxxx xx11 результат 0b xxxx xx11
вот что придумал я: (но это страшно!)
сдвигаю влево на 6 знаков и срвниваю...
и тогда подходящие варианты будут
либо 0b 0100 0000 (64) либо 0b 1000 000 (128)
if ( ( (flagi<<6)=128 ) | ((flagi<<6)=64) )
{
if (flagi & 0b00000010) flagi SET_BIT(0); else flagi CLR_BIT(0);
}
SET_BIT и CLR_BIT это макро устанавливающие или сбрасывающие нужный бит
нужно сделать ТАК:
если нулевой и первый бит разные то нулевому биту присваиваем значение первого бита
все остальные биты (2-7) должны остаться неизменными
использовать еще один байт для вычислений крайне нежелательно
как это сделать??
пример
flagi=0b xxxx xx01 результат 0b xxxx xx00
flagi=0b xxxx xx10 результат 0b xxxx xx11
flagi=0b xxxx xx00 результат 0b xxxx xx00
flagi=0b xxxx xx11 результат 0b xxxx xx11
вот что придумал я: (но это страшно!)
сдвигаю влево на 6 знаков и срвниваю...
и тогда подходящие варианты будут
либо 0b 0100 0000 (64) либо 0b 1000 000 (128)
if ( ( (flagi<<6)=128 ) | ((flagi<<6)=64) )
{
if (flagi & 0b00000010) flagi SET_BIT(0); else flagi CLR_BIT(0);
}
SET_BIT и CLR_BIT это макро устанавливающие или сбрасывающие нужный бит