char转换为int - 这里发生了什么?

时间:2013-10-14 05:42:25

标签: c++ char int type-conversion

我想将char值转换为int。我正在玩以下代码片段:

#include <iostream>
using namespace std;

int main() {
    char a = 'A';
    int i = (int)a;
    //cout<<i<<endl; OUTPUT is 65 (True)

    char b = '18';
    int j = b;
    //cout<<j<<endl; OUTPUT is 56 (HOW?)

    char c = 18;
    int k = c;
    //cout<<c<<endl; OUTPUT is empty
    //cout<<k<<endl; OUTPUT is 18 (Is this a valid conversion?)

    return 0;
}

我想要第三次转换,我得到了正确的输出,即18。但这是有效的转换吗?任何人都可以解释上述产出及其策略吗?

2 个答案:

答案 0 :(得分:3)

char a = 'A';
int i = (int)a;

演员阵容是不必要的。将数值类型的对象分配或初始化为任何其他数字类型的值会导致隐式转换。

i中存储的值是您的实现用于表示字符'A'的任何值。现在几乎所有的系统(除了一些IBM大型机,可能还有一些其他系统),这个值将是65

char b = '18';
int j = b;

具有多个字符的字符文字属于int类型,并具有实现定义的值。该值可能为'1'<<8+'8',并且从charint的转换会丢弃高位,从而留下'8'56。但是要避免使用多字符文字。 (这不适用于'\n'之类的转义序列;虽然单引号之间有两个字符,但它代表单个字符值。)

char c = 18;
int k = c;

char是整数类型;它可以轻松保存整数值18。将该值转换为int只会保留该值。因此ck都是整数变量,其valie为18。使用

打印k
std::cout << k << "\n";

将打印18,但打印c使用:

std::cout << c << "\n";

将打印一个不可打印的控制字符(恰好是Control-R)。

答案 1 :(得分:1)

char b = '18';
int j = b;

b,在这种情况下,'18'的char不具有非常一致的含义,并且具有依赖于实现的行为。在你的情况下,它似乎被转换为ascii值56(相当于你从char b ='8'得到的。)

char c = 18;
int k = c;

c保存字符值18,转换为int完全有效。但是,如果显示为字符,它可能不会显示很多。这是一个非打印控制角色。