[英]Printing a character data type as integer data type
#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]
a[1]-'0'
,它將顯示索引處出現的字符的確切值(output: 2)
。為什么會這樣?
ASCII表中的字符常量'2'
的代碼為50。因此,使用格式說明符%d
將字符顯示為整數,並顯示其值50。
至於這個表情
a[1] - '0'
然后,正如已經說過a[1]
,代表字符'2'
a[1]
存儲ASCII值50
。 字符'0'
具有ASCII碼48
。 因此,差異就大了2
。
讓我們看看運行時發生了什么。
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
C指定字符'0'
, '1'
, '2'
,... '9'
是連續的。
'0' + 3
必須等於'3'
。
這適用於任何字符集:通用ASCII或其他。
減去'0'
產生數值差。
printf("%d",'2' - '0'); // must print 2
...在上述十進制數字列表中,0后的每個字符的值應比前一個的值大一個。 ... C11dr§5.2.13
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.