Создать переполнение при заданном значении

0

Если непознанный байт переполняется, он переходит от 255 к 0, а vica versa -1 дает 255.

Можно ли переполнять его, например, 200? Без использования операторов if.

  • 4
    Нет. Зачем тебе это нужно?
  • 2
    Вы ищете по модулю?
Показать ещё 2 комментария
Теги:
position
counter
overflow

3 ответа

1

Оператор modulo делает то, что вы хотите, с некоторой обманкой для отрицательных значений:

int wrap(int x, int n) {
    return x < 0 ? ((x % n) + n) % n : x % n;
}

// wrap(205, 200) == 5
// wrap(-1, 200) == 199
  • 0
    Спасибо, я собираюсь реализовать это. Отлично.
  • 0
    @MarcGlisse Нет, мы хотим сделать x позитивным. Когда n - x выполняет x он отрицательный, поэтому результат положительный.
Показать ещё 3 комментария
1

Переполнение достаточно просто:

unsigned int a = 150, b = 150;
a += b; // do an operation
a %= 200; // wrap it

Однако, с потоком, это немного сложнее (см. Запрос orlp для этого).

Чтобы уменьшить вероятность ошибки, если вы используете эту переменную несколько раз, в C++ с перегрузкой оператора вы можете создать класс, который имитирует целочисленный тип, который переносится после каждой операции с перегрузкой оператора.

0

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

  1. Все типы, такие как char, short, int и т.д., Встроены и предопределены парсером.
  2. 200 не является силой двух; компьютер представляет числа в двоичном формате.

Примечание. Вышеупомянутое верно только в том случае, если вы хотите неявное переполнение; Модули позволяют выполнять явное переполнение.

  • 0
    Предопределено парсером? Вы наверняка хотели сказать, что они встроенные, фундаментальные типы?
  • 0
    Я подумал, может быть, я думаю, что сложный, и есть очень простой математический трюк для этого, но я не думаю.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню