【问题标题】:In C, to convert character to an integer is it necessary to do typecast在 C 中,要将字符转换为整数,需要进行类型转换
【发布时间】:2017-11-04 14:01:34
【问题描述】:

在 C 语言中,当我们最终要从数字字符中减去字符 0 以获得其在整数中的等效数字时,是否需要将字符类型转换为整数?

以下示例的目的是将字符 5 转换为其等效的整数。

char a = '5';

int x = a - '0';这里将字符5减去字符0得到的字符结果的十进制值将等价于字符5。

int i = (int)a; 这里字符 5 的十进制值将被分配,即使在进行类型转换之后也是如此。

那么当类型转换对其操作数没有影响时,进行类型转换有什么意义呢?

【问题讨论】:

  • "字符5减去字符0得到的字符结果的十进制值等于字符5"什么? '5'减去字符'0'得到的值是5,而字符'5'的值是53。怎么样?

标签: c typecast-operator


【解决方案1】:

那么当类型转换对其操作数没有影响时,进行类型转换有什么意义呢?

代码的

可读性(或符合n1570 中指定的C programming language)。

顺便说一句,大多数类型转换都不会被 optimizing compiler 翻译成任何机器代码。

【讨论】:

    【解决方案2】:

    转换可以是隐式的(不丢失精度)

    int x = a;
    

    或显式

    int x = (int)a;
    

    更确切地说是整数提升,在操作之前完成

    int x = ((int)a) - '0';
    

    在 C '0' 字符文字中已经是 int,而在 C++ 中它是一个字符。

    【讨论】:

    • 字符常量已经是int类型,所以'0'不会提升为int
    • Nitpick:“强制转换”(即“显式转换”)永远不能是隐式的。可以隐式或显式的是“转换”。
    猜你喜欢
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多