Сдвиг битов при несмежном представлении внутренних номеров

Я пишу произвольную целочисленную библиотеку c ++ в качестве домашнего задания. Я представлял числа внутри как вектор беззнакового целого, в базе 10 ^ n, где n настолько велико, насколько это возможно, вписываясь в одну целую цифру без знака.

Я сделал этот выбор в качестве компромисса между пространством, производительностью и доступом к цифрам (он позволяет мне иметь гораздо лучшие характеристики, чем при использовании базы 10, без каких-либо сложностей при преобразовании в удобочитаемую строку).

Так, например:

base10 (441243123294967295) 18 цифр

base1000000000 (441243123,294967295) 2 цифры (через запятую)

Внутреннее представление с uint32

[00011010 01001100 11010101 11110011] [00010001 10010100 11010111 11111111]

Чтобы завершить домашнее задание, я должен реализовать сдвиг битов и другие побитовые операторы.
Имеет ли смысл реализовывать сдвиг для числа с таким внутренним представлением?

Должен ли я перейти на основание 2 ^ n, чтобы все биты внутреннего представления имели значение?

1

Решение

Вы Можно, но ты не должен: сдвиг битов удвоит число, независимо от того, какую базу вы используете толкования это позже, потому что внутренне эти ints по-прежнему интерпретируются как двоичные с помощью базовых операций сдвига. Ваша реализация должна будет принять решение о компромиссе, потому что ваш сдвиг станет труднее реализовать. С другой стороны, печать в Base-10 останется проще.

Другое решение в пользу десятичной системы, которое вы можете рассмотреть, заключается в использовании двоично-десятичные дроби (BCD). В свое время аппаратное обеспечение, используемое для ускорения этих операций (например, 6502, процессор Apple-2), включало специальные инструкции для добавления байтов в интерпретацию BCD. Вы должны будете выполнить специальную коррекцию, если используете это представление, но это может быть достойным упражнением в обучении.

2

Другие решения

Должен ли я перейти на основание 2 ^ n, чтобы все биты внутреннего представления имели значение?

Определенно да!

Мало того, но современные компьютеры в целом все о base2. Если это упражнение, вы, скорее всего, захотите научиться делать это хорошо.

2

Все библиотеки для этого вида используют базу 2. Они делают это по причине: более быстрая обработка, возможность для побитовых операций, более компактное хранение и многое другое. Эти преимущества перевешивают трудность преобразования в десятичную. Поэтому настоятельно рекомендуется преобразовать в двоичный файл.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector