(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 бита на «правом конце» в момент прочтения предыдущего блока. Когда происходит переполнение из-за слишком длинного ввода для этого подхода?) [перевод с английского, немного кривоват, да].
Всю голову сломал уже, что делать! Все видео на Ютубе посмотрел, статьи прочитал, но не могу понять следующее:
- Что от меня хотят (:D)
- Что мне нужно делать с битами на концах и как это связано с конвертацией
- Что делать со знаком? За него, как я понимаю, отвечает первый бит. То есть, его обязательно нужно сохранить.
- Тут нужно как-то учитывать "дополнительный код", который я так и не могу до конца понять...
Очень прошу помощи. Реально затупил на этом задании, хотя практически полностью его доделал (это самый последний пункт из всего задания по теме). Заранее очень очень благодарю!