Задать вопрос
@Apxu

Как мне получить нужное значение?

Коллеги, столкнулся с такой задачей,
например есть $dec = 967
и выполняется следующий код
$dec = 967;
$res = ($dec >> 8) << 7 | ($dec % 128); 
var_dump($res); //результат 455

Нужно как-то получить из 455 обратно 967

для проверки можно использовать следующие значения:
$dec = 1225 - результат 585
$dec = 1467 - результат 699
$dec = 1945 - результат 921

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

Скормите вашему коду 839 - тоже получите 455
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы