如何从C中的字符中减去整数?

时间:2014-05-28 10:13:34

标签: c++ c variables char int

Brian Kernighnan在他的“用C编程”一书中说

  

根据定义,字符只是小整数,所以char变量和   常量与算术表达式中的整数相同。

这是否意味着我们可以从int ??

中减去char变量

我写了一小段代码:

#include <stdio.h>

main()
{
    int a ;
    int c;
    a = 1;
    c = 1 - '0' ;
    printf("%d", c);
}

然而它给了我输出= -47 ...

我做错了什么?我指定的变量是否具有正确的类型??

5 个答案:

答案 0 :(得分:6)

预期输出。 '0'是一个char值,因为您的编译器可能使用ASCII编码,其值为48.这将转换为int并从1中减去。它给出了值-47

所以程序会按照预期的方式完成,而不是你希望它会做什么。至于你做错了什么,很难说。我不确定你希望程序做什么,或者你想解决什么问题。

答案 1 :(得分:3)

转换为整数时,'0'-'9''中的字符的值为48-57('0'= 48,'1'= 49等)。详细了解ASCII Values。在数值计算中使用时,首先它们将转换为int,因此1- '0' = 1-48 =-47

答案 2 :(得分:2)

您在这里将实际操作表示形式混合在一起。 printf根据指定的格式输出数据 - 在您的情况下为整数。如果要将其打印为字符,请使用%d切换%c

答案 3 :(得分:1)

你正在做的是使用字符的ASCII代码处理,每个字符都分配了一个ASCII值。

enter image description here

现在,使用每个字符的ASCII播放一些内容,您可以执行以下操作:

int a;
a = 'a' - 'A' ;
printf("%d", a);

得到32作为输出,由于ASCII值为'a'= 97而'A'= 65,那么你有97-65 = 32

答案 4 :(得分:0)

我认为这可以让你更清楚地理解......

#include <stdio.h>

main()
{
    int a ;
    a = 1;
    printf("%d", char(a+48));
//or printf("%d", char(a+'0')); 
}