【问题标题】:char to int conversion - what's happening here?char 到 int 的转换——这里发生了什么?
【发布时间】:2023-04-10 23:29:01
【问题描述】:

我想将char 值转换为int。我正在使用以下代码 sn-ps:

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

【问题讨论】:

标签: c++ char int type-conversion


【解决方案1】:
char a = 'A';
int i = (int)a;

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

存储在i 中的值是您的实现用来表示字符'A' 的任何值。如今,在几乎所有系统上(除了一些 IBM 大型机和其他一些大型机),该值将是 65

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

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

char c = 18;
int k = c;

char是整数类型;它可以很容易地保存整数值18。将该值转换为 int 只会保留该值。所以ck 都是整数变量,其值为18。打印k 使用

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

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

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

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

【讨论】:

    【解决方案2】:
    char b = '18';
    int j = b;
    

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

    char c = 18;
    int k = c;
    

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

    【讨论】:

    • 谢谢如果c持有字符值18输出它返回空,为什么?
    • 不,'18' 的类型为 int,并且具有实现定义的值。该值从int 转换为char,可能会丢失信息。
    • 所以后面从charint 不会在丢失信息中返回?虽然它输出正确的值..
    • 尝试将 ascii 值 18 打印到屏幕上不会做很多事情。如果您在 ascii 表中查找,您就会明白原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 2013-11-03
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多