C++:类似的模组操作打印不同的值

C++: Similar mod operations printing different values

本文关键字:打印 操作 C++      更新时间:2023-10-16

我正在尝试执行一些自定义操作,但我注意到以下错误。在计算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

您遇到 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;
}