C++ C++;:类似的mod操作打印不同的值
我试图执行一些自定义操作,但我注意到以下错误。 在计算C++ C++;:类似的mod操作打印不同的值,c++,mod,C++,Mod,我试图执行一些自定义操作,但我注意到以下错误。 在计算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) %
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;
}
#包括
使用名称空间std;
int main()
{
字符s='r';
char temp1=s;
chart='a';
char temp2=t;
s=(int(temp1)%int(96))+(int(s)%int(96))+96;
cout您遇到了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;
}
intmain()
{
int s='r';
int temp1=s;
int t='a';
int temp2=t;
s=temp1%96+s%96+96;
密码样式:不要说int(96)<代码> >代码> > 96 < /代码>我不明白为什么124开始打印-你希望它打印什么?不管你的答案是什么,然后考虑什么是<代码> char < /代码>,因为这是你想要存储结果的变量。你可能想使用<代码>无符号char < /c> > SudhanvaNarayana @ OK,那么范围是什么?一个有符号的字符
?@SudhanvaNarayana这就是你的答案。看看这有多简单?132不在-128到127的范围内。如果我们说的是2的补码,它的位模式实际上会产生-124。如果这个字符是一个字符串呢?(假设我在字符串的[I]中循环)您可以在打印前将值强制转换回char
。例如,cout它是超出范围的赋值,而不是溢出。(溢出是指算术运算的结果超出从操作数推断的结果类型的范围;但赋值不是算术运算)。对于有符号整数类型,溢出通常是未定义的,而超出范围的赋值是由实现定义的。