תקן ASCII
כעת יש ברשותנו את הכלים להבין מדוע כאשר כתבנו char c = 65 והדפסנו את c, קיבלנו את התו A. מכיוון שמשתנים מיוצגים כמספרים בינאריים בתוך בתים בזכרון, אין לנו דרך לכתוב ישירות את התו A לזכרון - אנחנו צריכים יצוג כלשהו שלו כמספר, ממנו נמיר לתו. יצוג זה נקרא ASCII - הוא נותן ערך מספרי לכל תו שהמחשב יודע להדפיס.
לכל תו בעמודה char הטבלה מצמידה ערך מספרי בעמודה decimal. כך ניתן לראות שהערך המספרי של התו A הוא 65 - כלומר, על פי מוסכמה, כאשר printf מנסה להדפיס תא בזכרון כ-char שערכו הוא 65, היא מדפיסה את התו A - זו משמעות תקן ה-ASCII.
נשים לב שגם לספרות רגילות יש ערך ASCII ששונה מהערך המספרי שלהן! למשל, לתו '5' יש את ערך ASCII של 53.
לדוגמא, נכתוב תוכנית שמקבלת ספרה מהמשתמש ומדפיסה את ערך ה-ASCII שלה:
#include <stdio.h>
int main() {
int x;
scanf("%d", &x);
int x_ascii = x + '0';
printf("%d ASCII value = %d", x, x_ascii);
}
בשביל להבין לעומק את הדוגמא, נזכיר כי יש הבדל בין המספר 0 לבין התו '0'. באופן כללי, המספר 0 הוא int שערכו המספרי הוא 0, בעוד שהתו '0' הוא char שערכו המספרי הוא 48 (לפי טבלת ASCII). אם לדוגמא המשתמש הכניס את הספרה 5, ונרצה לקבל את ערך ה-ASCII שלה 53, נוסיף לה '0', ונקבל:
5 + '0' = 5 + 48 = 53 = '5'
לסיכום, יש להזהר מאוד ולהבדיל בין מספרים לבין תווים בשפת C, ולדעת כיצד להשתמש בהם.