У меня есть эта функция, которая является мультиплексором.Функция мультиплексора C
// Enumerated type for a single bit.
typedef enum { FALSE=0, TRUE=1 } BIT;
BIT multi(BIT A, BIT B, BIT C, BIT D, BIT S1, BIT S0)
{
if(S1== FALSE && S0 ==FALSE)
return A;
else if(S1==FALSE && S0==TRUE)
return B;
else if (S1== TRUE && S0== FALSE)
return C;
else
return D;
}
Для мультиплексора, S1, S0, как два-битового двоичного числа, индексирование в A, B, C, D, в указанном порядке.
так, как S1 == 0 & S0 == 0 относится к А и S1 == 0 & S0 == 1 относится к B и т.д. и т.п.
Я чувствую мой код близко или далеко, или это исправить мне просто нужно исправить, как я тестирую его в основной, в котором у меня есть ...
assert(multiplexer(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) == A);
assert(multiplexer(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE) == D);
Stylistic комментарий: пространство вокруг операндов '= = 'и после' if' полностью противоречит в коде. Код, написанный в хорошем стиле, безжалостно систематичен по своему расположению; расстояние равномерно. В целом, я бы рекомендовал использовать 'else if (S1 == TRUE && S0 == FALSE)' пространство с любой стороны оператора '==' и пробел после 'if'. –
Мне нравится идея: 'BIT multi (BIT A, BIT B, BIT C, BIT D, BIT S1, BIT S0) {Выбор BIT [] = {A, B, C, D}; выбор возврата [(S1 << 1) | S0]; } 'для компактности. Я не уверен, где он подходит по шкале для скорости, но у него нет никаких условностей, которые обычно считаются хорошими для скорости. –