C ++: похожие операции мода, печатающие разные значения

Я пытаюсь выполнить пользовательскую операцию, но заметил следующую ошибку.
При расчете стоимости tЯ получаю желаемый результат, но для s Я получаю отрицательные значения без причины.

#include <bits/stdc++.h>

using namespace std;

int main()
{
char s = 'r';
char temp1 = s;

char t = 'a';
char temp2 = t;

s = (int(temp1) % int(96)) + (int(s) % int(96)) + 96;
cout << int(s) << " ";

t = (int(temp2) % int(96)) + (int(t) % int(96)) + 96;
cout << int(t) << endl;
}

Я должен использовать эту логику в другом месте в большей программе, я получаю одинаковую ошибку в обоих случаях

Выход
-124
98

Я не понимаю, почему -124 начинают печатать

-2

Решение

Вы столкнулись с проблемой переполнения 8-битным целочисленным типом (char).

Это выражение

s = (int(temp1) % int(96)) + (int(s) % int(96)) + 96;

Алгебраически ваш код упрощается до этого:

s = 114 % 96 + 114 % 96 + 96;

s = 18 + 18 + 96;

s = (signed char)132;  // overflow!  132 won't fit in range [-128..127]

s = -124;

Измените объявление s и t на тип int. И некоторые полезные способы улучшить ваш стиль кода также сделаны:

int main()
{
int s = 'r';
int temp1 = s;

int t = 'a';
int temp2 = t;

s = temp1 % 96 + s % 96 + 96;
cout << s << " ";

t = temp2 % 96 + t % 96 + 96;
cout << t << endl;
}
1

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

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

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