(Java) Применение схемы Горнера для конвертации из Hex в Dec

Обучаюсь Java-программированию, загнал себя в тупик на теме побитовых операций.

Мне поставлена задача: написать конвертер Integer из Hex в Dec, используя схему Горнера. Разрешается пользоваться только математическими операциями и работой с битами.

Простую конвертацию Hex в Dec я осуществил правильно:

if ((Integer.MAX_VALUE - cipherValue) / 16 >= value) value = value * 16 + cipherValue;

Но меня попросили поработать со сложными случаями, например такими: 0xffffffff, 0xfffffffff, -0x1 и 0x0ffffffff.

Указали, что простым копирование схемы Горнера тут не обойтись: необходимо поработать напрямую с битами (указание: Подумайте о двоичных и битовых операциях: каждая новая шестнадцатеричная цифра контролирует 4 бита на «правом конце» в момент прочтения предыдущего блока. Когда происходит переполнение из-за слишком длинного ввода для этого подхода?) [перевод с английского, немного кривоват, да].

Всю голову сломал уже, что делать! Все видео на Ютубе посмотрел, статьи прочитал, но не могу понять следующее:

  1. Что от меня хотят (:D)
  2. Что мне нужно делать с битами на концах и как это связано с конвертацией
  3. Что делать со знаком? За него, как я понимаю, отвечает первый бит. То есть, его обязательно нужно сохранить.
  4. Тут нужно как-то учитывать "дополнительный код", который я так и не могу до конца понять...

Очень прошу помощи. Реально затупил на этом задании, хотя практически полностью его доделал (это самый последний пункт из всего задания по теме). Заранее очень очень благодарю!


Ответы (0 шт):