为字符变量

时间:2017-06-06 20:25:45

标签: c++ scope

我试图为charunsigned charsigned char变量分配一个整数,以了解相同的结果。我在64位Mac OS上运行此代码。我对这个回应感到困惑,我正在找人帮助我。我不是在看结果的大小,我只是想了解为什么打印变量的值会导致奇怪的字符。

 #include<iostream>
 using namespace std;

 int main() {
     char a = 2;
     unsigned char b = 10;
     signed char c = 200;
     cout<<"Regular char variable value "<<a<<"\t"<<"size of the variable is "<<sizeof(a)<<"\n";
     cout<<"Regular char variable value "<<b<<"\t"<<"size of the variable is "<<sizeof(b)<<"\n";
     cout<<"Regular char variable value "<<c<<"\t"<<"size of the variable is "<<sizeof(c)<<"\n";

 }

此代码的输出如下:

Regular char variable value     size of the variable is 1
Regular char variable value 
                size of the variable is 1
Regular char variable value ?   size of the variable is 1

请注意,输出中的第二行是乱码,这会增加输出的复杂性。

1 个答案:

答案 0 :(得分:1)

这是因为cout<<a尝试将a打印为字符而不是数字(bc相同)。

查看ASCII表 ASCII table

告诉您,字符2为STX,10为LINEFEED200在非标准特殊字符部分中为up,或者为。请注意,您为最大值为127的signed char分配200,因此您实际上最终会得到一个负数。

由于这些字符在终端上都没有可见的表示,因此您将看到空白。

要以数字方式打印它们,您应该使用,例如

cout<<(int)a;