Во-первых, посмотрите, где вы хотите первую проверку против 0, так как она делает все ваши отрицательные проверки бессмысленными.
Во-вторых, я бы, вероятно, построил таблицу поиска в виде массива из 1300 элементов со смещением на 500 (наименьшее отрицательное значение). Каждый элемент будет желаемым результатом при поиске этого числа. Если вы ищете что-то меньше -500, не проверяйте массив.
Так это будет выглядеть примерно так:
table[0] = 0b0110; // -500 through -599
table[1] = 0b0110;
...
table[100] = 0b0101; // -400 through -499
table[101] = 0b0101;
...
Поиск будет:
if (value <= -600) {
return 0b0111;
}
else {
return table[value + 600];
}
Достаточно небольшое количество значений, чтобы размер массива не был запредельным. Инициализируйте цикл в начале вашей программы.