将字符数据类型打印为整数数据类型

时间:2017-11-02 17:31:21

标签: c

#include<stdio.h>
main()
{
    char a[12];
    scanf("%s",a);
    int s=0;
    s=s+a[1];
    printf("%d",s);
}
example:
a=1234
output:50

这是一个基本的c程序。当我尝试打印s的值时,它显示50 但当我用a[1]替换a[1]-'0'时,它会显示索引(output: 2)处出现的字符的确切值。有什么理由发生?

3 个答案:

答案 0 :(得分:1)

ASCII表中的字符常量'2'具有代码50.因此,使用格式说明符%d时,字符显示为整数,显示其值为50。

至于这个表达

a[1] - '0'

然后据说a[1]表示字符'2'存储ASCII值50。字符'0'具有ASCII代码48。所以差异是2

答案 1 :(得分:0)

让我们看看运行时发生了什么。

s is initialized to 0

and a[] is scanned with "1234"; 

a[0] = '1';
a[1] = '2';
a[2] = '3';
a[3] = '4';

第一个案例

s=s+a[1]; // 0 + asci value of 2 which evaluates to 50

第二种情况

s=s+a[1]-'0' //  0 + asci value of 2 i.e 50 - asci value of 0 i.e 48 = 2

man -a ascii

答案 2 :(得分:0)

C指定字符'0''1''2',... '9'的代码是连续的。
'0' + 3必须等于'3' 这适用于任何字符集:公共ASCII或其他。

'0'减去会产生数值差异。

printf("%d",'2' - '0'); // must print 2
  

...上述十进制数字列表中0之后的每个字符的值应比前一个值大1。 ......C11dr§5.2.13

相关问题