טיפוסי int, char

drhouse2

New member
טיפוסי int, char

1.int ידוע בתור טיפוס של מספרים שלמים. יצא לי לראות תוכנית מסויימת שבה הגדירו C בתור טיפוס של int ובהמשך יצרו לולאה:
while ((c=getchar())!=EOF ) (אגב המטרה של התוכנית היא לספור כמה מילים קיימות בקובץ).
אני מבין שטיפוס char לא מתאים כי לא תמיד הערך של EOF=-1 בתחום שלו, אבל איך הוא יכול לאגור תווים בתור int שקולט רק מספרים?
האם טבלת ASCII לא מדברת רק עבור char ?

2.אני נוטה להתבלבל בין המספר 1 לתו '1'(שמספרו בטבלת ASCII הוא 49). האם יש בינהם הבדל? אם למשל מופיע לי ביטוי a' + 1' - האם הפלט יהיה 'b' או a' + 49'? ע"פ גרשיים?

תודה,
 
char הוא מספר לכל דבר

טבלת ה-ASCII בסך הכל אומרת איזה תו כל מספר מיצג, ופונקציות קלט ופלט יודעות לעבוד איתה, אך אין שום הבדל בין 49 ובין '1'. (כמובן, אם עובדים עם ASCII)
לכן, int יכול להכיל כל ערך ש-char יכול, והביטוי zzz'a'+1zzz הוא בעצם 97+1, וערכו הוא 98 (שזהה ל-'b').
 

drhouse2

New member
אז האם זה נכון לומר ש

char יכול להכיל:
1.מספרים שלמים בין zz (-128) - 127 zz או בין zz 0 - 255 zz
255.2 אפשרויות של תווים

int יכול להכיל:
1.מספרים שלמים בין zz (-2^15) - (2^15)-1 zz או unsigned בין zz 0 - (2^16)-1 zz
255.2 אפשרויות של תווים

אפשר להשתמש בטבלת ASCII בכל טיפוסי השלמים ואי אפשר להשתמש בטבלת ASCII לטיפוסי נקודות הצפה ?

תודה
 

BravoMan

Active member
טבלת ASCII היא בשבילך, לא בשביל המחשב.

אתה חייב להבין משהו:
מחשב לא יודע מה זה "תו" והוא גם לא יכול לאחסן "תו" ולא משנה מה טיפוס המשתנה.

בזיכרון המחשב מאוחסנים רק מספרים.
כל טיפוסי המשתנים מחזיקים רק מספרים.

אז איך בכל זאת אנחנו קוראים וכותבים אותיות וסימנים אחרים במחשב?
ע"י כך שאנחנו, בני האדם, החלתנו לייצג אותיות בעזרת מספרים, כדי שלא נתבלבל, החלטנו שנעשה את זה בדרך אחידה.
כך נולדה טבלת ה-ASCII שהיא דרך סטנדרטים לייצג את ה-א"ב האנגלי בעזרת מספרים.

לדוגמה, הוחלט ש-'A' מיוצג ע"י מספר 65.
כעת, לא משנה היכן תאחסן מספר 65, כל עוד תחליט בתוכנה שלך לפרש אותו כאות ולעשות לפי זה את הפעולה המתאימה כמו לצייר את האות A על המסך, זה מה שהמחשב יעשה.

אז כן - בתאוריה אתה יכול לאחסן מספר 65.0 בתוך double ולהגיע בסוף למצב שהאות A תודפס על המסך, כי למחשב לא אכפת - יש לו פונקציה שיודעת לצייר אוסף נקודות מסוים על המסך בהינתן מספר 65, ולעין האנושים אוסף נקודות הזה נראה כמו A.

וכמו שכתבתי לך קודם - טבלת ASCII היא דרך אחת וגם ישנה לייצג תווים. יש עוד דרכים שדורשות יותר מקום ממה ש-char בודד מספק, וגם פה יש כמה אפשרויות:
לאחסן כל תו בטיפוס נתונים גדול יותר, או להחליט שמספר תאים מסוג char מייצגים את אותו התו כולם ביחד (בחלקים).
 
למעלה