C++:类似的模组操作打印不同的值
C++: Similar mod operations printing different values
我正在尝试执行一些自定义操作,但我注意到以下错误。在计算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;
}
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 重载操作程序时出错>>用于类中的字符串 memebr
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 打印矩阵后分割错误,但在打印额外行后修复(ostream <<操作器)
- 如何对 n 个字符串执行操作,然后在C++中打印它们
- C++:类似的模组操作打印不同的值
- 在C++中从后缀表达式字符串打印单个操作
- 未定义的操作?程序一个接一个地打印出不同的值
- c++位操作如何打印出16、32位
- 使用光标操作打印垂直直方图c++ [ncurses][解决了无ncurses]
- 指针操作导致printf以相反顺序打印参数