Как мне получить нужное значение?
($dec >> 8) << 7 теряет нижние 8 бит и сдвигает на один вправо.$dec % 128 оставляет нижние 7 бит.
Таким образом, эта конструкция выкусывает из числа 7-й бит (у младшего номер 0).
Восстановить однозначно нельзя: надо (($res & ~0x7F) << 1) | ($res & 0x7F) и, возможно, | 0x80.
Например: ((585 & ~0x7F) << 1) | (585 & 0x7F) | 0x80 = 1225.
Во всех ваших четырёх примерах установить опущенный 7-й бит нужно. Он что-то значит?
Результат однозначно восстановить не получится, так как 7 бит результата будет являться комбинацией (7 OR 8) битов входа. 
Скормите вашему коду 839 - тоже получите 455