我想更改我的char变量。
using namespace std;
int main()
{
char q;
q='b';
char c=127;
//cout << (int)q << endl<< static_cast<int>('z');
char d= static_cast<char>(static_cast<int>((static_cast<int>('z') +19)));
cout << (int)d << endl;
system("pause");
}
Intupt:
-115
为什么在添加变量后指定-115?
答案 0 :(得分:1)
在您的平台上,char
是8位signed
2补码类型。您实际上是溢出此类型,并且在C ++中溢出signed
整数类型的行为是 undefined 。 不要这样做。
注意:
标准规定了8位。
char
可以是unsigned
或signed.
如果unsigned
必须的范围为[0,255],则255 + 1将为0. unsigned
类型的溢出是定义。
如果signed
可以的范围是-128到+127 或 -127到+127。 C ++ 14不允许后一个范围(1&#39; s补码)。 (有趣的是,这不是一个突破性的变化,因为从1到2的补码的差异只能在像你这样的格式错误的程序中观察到,如果有的话!)
一个简单的补救措施?使用unsigned char
。
答案 1 :(得分:0)
122 + 19 = 141 --> 1000 1101
二进制
type char这里可能是8位signed int,所以第一位'1'是它的符号位。
1000 1101
就像在计算机内存中一样。
但计算机通常使用补码来显示负数。
1000 1101
的真实代码是1111 0011
,同样地,第一个'1'是其符号位,因此1111 0011
正好{ 10base中的{1}}