Предполагая, что вы можете использовать побитовые операторы, вы можете проверить, что общего имеют числа с одинаковым выходом, в этом случае я предпочел бы использовать ввод 0-31, потому что это проще (вы можете просто вычесть 1 из фактического значения)
Что у тебя есть?
0x0000 -> 1
0x0001 -> 1
0x0010 -> 1
0x0011 -> 1
0x0100 -> 2
0x0101 -> 2
0x0110 -> 2
0x0111 -> 2
0x1000 -> 1
0x1001 -> 1
0x1010 -> 1
0x1011 -> 1
0x1100 -> 2
...
Это довольно просто, если вы заметили, что третий бит всегда равен 0
, когда выходной сигнал должен быть 1
, и наоборот, всегда 1
, когда выходной сигнал должен быть 2
так:
char codify(char input)
{
return ((((input-1)&0x04)>>2 == 1)?(2):(1));
}
EDIT
Как следует из комментария, он должен работать также с
char codify(char input)
{
return ((input-1 & 0x04)?(2):(1));
}
потому что в некоторых языках (например, C) 0
будет иметь значение false
, а любое другое значение - true
. Я не уверен, что это работает и в C #, потому что я никогда не программировал на этом языке. Конечно, это не зависит от языка, но это более элегантно!