字符到整数的转换 - 这里发生了什么?

char to int conversion - what's happening here?

本文关键字:这里 发生了 什么 转换 整数 字符      更新时间:2023-10-16

我想将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.但这是有效的转换吗?谁能解释一下上述输出及其策略?

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)。

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

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

char c = 18;
int k = c;

C 保存字符值 18,转换为 int 是完全有效的。但是,如果您显示为字符,它可能不会显示太多。它是一个非打印控制字符。