-2

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

4

1 回答 1

1

您遇到了 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;
}
于 2017-02-06T18:37:42.447 回答