簡體   English   中英

將字符數據類型打印為整數數據類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM