#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)
处出现的字符的确切值。有什么理由发生?
答案 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
答案 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