Странное поведение по модулю на строках

Я применяю простой шифр Vigenere к входному файлу. Код, который я использую для шифрования одного символа:

char CryptoModule::Vigenere(char& letter)
{
char encryptedVal = (letter + EncryptKey_[iterator_])%128;
iterator_ = iterator_ == EncryptKey_.size()?0:iterator_+1;
return encryptedVal;
}

Однако по модулю ведет себя очень странно. Когда буква «0» (ASCII char 48), ключ «Chunky Peanut Butter», а 9-й символ используется для шифрования (char «a», то есть ASCII 97), тогда можно ожидать (48 + 97) % 128 = 17. Однако возвращаемый результат равен -52. Может ли кто-нибудь объяснить, какие исправления необходимо внести, чтобы получить ожидаемое значение? Кажется очень странным, что компилятор пришел к выводу, что остаток от натуральных чисел деления 2 является отрицательным.

Спасибо заранее и хорошего дня

1

Решение

Задача ещё не решена.

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

Других решений пока нет …

По вопросам рекламы [email protected]