#include <iostream>
int main() {
char x = 'a';
char y = 'b';
char z = x + y;
printf("%d\n",z);
return 0;
}
为什么这段代码的输出是-61?
答案 0 :(得分:3)
你正在使用%d它应该是%c
char x = 'a';
char y = 'b';
char z = x + y;
printf("%c\n",z);
return 0;
如果你设法打印ab
,你应该使用这样的字符串:
string x = "a";
string y = "b";
string z = x + y;
cout <<z<<endl;
return 0;
答案 1 :(得分:0)
A) 每个字符都在计算机中。 (计算机只能处理数字,字符是计算机的“唯一”图像。)
所以:搜索ASCII表。例如http://www.asciitable.com/
- &GT; a = 97,b = 98
a + b = 97 + 98 = 195
b)中 char被定义为带有符号的8位(= 256个数字):它可以包含-128到127之间的数字。所以195不适合。在计算时,丢弃了进位,出现了这样的数字。
编辑:
要表明,内部发生了什么:计算为二进制:
class A{
public:
const char* chr;
A(){chr = "aaa";}
};
class B : public A{ // public, not private
public:
// const char* chr; // no need for this
B(){chr = "bbb";}
};
因为这是签名号码,所以会存储two complement。 设置第一个选项 - &gt;负。但最简单的方法(对我来说)计算:
第一位的值为-128,第二位为64。 最小位:2和1.所以:-128 + 64 + 2 + 1 = -61
希望这有助于解决这个问题......
编辑2:
讨论结果:这是你的CPU上发生的事情。这是因为CPU有一些技术参数。但你不能假设,这发生在每个CPU上! C ++编译/为每个CPU编译,但在C / C ++中没有定义溢出,因此在其他CPU上可能会有其他结果。