c++中char和int是如何工作的



可能我要问一个愚蠢的问题,但我想确认char是如何工作的?让我用例子来解释我想问的问题。假设我先声明一个char variable,然后是input 6或任意整数字符。

#include <iostream>
using namespace std;
int main(){
    char a;
    cin >> a;
    cout << a*a; // I know here input's ASCII value will multiply
    return 0;
}

同整数input 6

#include <iostream>
using namespace std;
int main(){
    int a;
    cin >> a;
    cout << a*a; // Why compiler not take input's ASCII Value here?
    return 0;
}

我想现在我的问题很清楚了。

char是一种基本数据类型,大小为1字节(不一定是8位!!),能够表示至少所有字符的ASCII码范围。因此,例如,char x = 'a';实际上存储'a'的ASCII值,在本例中为97。然而,ostream运算符是重载的,所以它们"知道"如何处理char,而不是盲目地在cout << x;这样的行中显示97,它们显示字符的ASCII表示,即'a'

但是,无论何时执行a * a,编译器都会执行所谓的整型提升,并隐式地将char中的数据转换为int。因此,对于编译器来说,表达式a * a被翻译成(int)a * (int)a,这是97 * 97的结果,所以最终显示的是9409

注意,对于编译器charint是两个不同的类型。它可以区分这两者。因此,operator<<仅在输入类型为char或可隐式转换为char的类型时显示字符。

char的情况下,它不是二进制被相乘,它是你输入的任何ASCII值。如果是6,则ASCII值为54,因此输出2916。当aint时,直接存储6,因此输出36

int的情况下,它将读取您键入的数字作为数值而不是其ASCII值。因此,你只能对整数使用数字,然而char允许你使用任何字符(例如:A,B,C,D | 1,2,3,4 | !#%^),它使用它的ASCII值。例如,4的ASCII值为52,A、*的ASCII值分别为65、42。注意:大写字母和小写字母是不同的(例如S = 83,而反过来S = 115)。

希望这能帮到你。

这是因为隐式类型转换:

当某个类型的表达式存在时,执行隐式转换T1用于不接受该类型但接受某些类型的上下文中其他类型T2,特别是:

当表达式用作操作数时,操作符为预计T2

在你的例子中

char a;
cin >> a;
cout << a*a; /

Operator *需要一个整型,所以类型char被隐式转换为int,所以当char转换为int时,系统使用char对应的ASCII值。详见http://en.cppreference.com/w/cpp/language/implicit_cast

相关内容

  • 没有找到相关文章

最新更新