Неправильный вывод из пользовательского типа большого целого числа без знака при проверке вычитания в соответствии с модC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Неправильный вывод из пользовательского типа большого целого числа без знака при проверке вычитания в соответствии с мод

Сообщение Anonymous »

Мне поручено создать класс UnsignedBigInteger, который может обрабатывать числа, большие, чем long. Мне разрешено использовать массив байтов в качестве внутреннего представления, uint8_t[].
Я придумал тип UnsignedBigInteger, хранящий целое число внутри массива. сегментов uint8_t. Я работаю в 64-битной архитектуре ( в компилятор).
Я столкнулся с проблемой при попытке закодировать оператор- между двумя моими пользовательскими объектами. Мы имеем дело с целыми числами без знака, скажем a и b: когда a < b, a - b должно следовать правилам модульной арифметики (дополнительную информацию о модульной арифметике см. в этом вопросе). .
Вот моя попытка:

Код: Выделить всё

#include 
#include 
#include 
#include 

class UnsignedBigInteger {
public:
constexpr static unsigned long long two_fifty_five{0xffULL}; // 0xff = 0d00000255 = 2^(8) - 1
constexpr static unsigned long long max_ull{std::numeric_limits::max()};

UnsignedBigInteger() = default;
UnsignedBigInteger(const unsigned long long value) {
printf("value = %llu\n", value);
unsigned long long shift{two_fifty_five};
for (size_t i=0; i!=len; ++i) {
_value[i] = (value & shift) >> (8 * i);
printf("_value[%lu] in binary: %llb - shift: %llb\n", i, _value[i], shift);
shift 

Подробнее здесь: [url]https://stackoverflow.com/questions/79316606/wrong-output-from-custom-big-unsigned-integer-type-when-checking-subtraction-fol[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»