Я придумал тип UnsignedBigInteger, хранящий целое число внутри массива. сегментов uint8_t. Я работаю в 64-битной архитектуре (
Код: Выделить всё
-m64Я столкнулся с проблемой при попытке закодировать оператор- между двумя моими пользовательскими объектами. Мы имеем дело с целыми числами без знака, скажем 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]
Мобильная версия