07-08-2015, 06:26
|
|
מנהל משבראש, בלשנות, תכנות ויהדות
|
|
חבר מתאריך: 04.06.06
הודעות: 33,130
|
|
|
עכשיו רק קלטתי שאמרת לו "מה", אך לא פירטת "למה".
עדיף אם כבר להסביר לו גם את ההיגיון בדברים.
shasho, בשפת C קבועי תווים הם למעשה מספרים לכל דבר, לפי ערך ה־ASCII שלהם; כך הם מיוצגים בזיכרון המחשב.
התו 'A' לדוגמא שקול לחלוטין למספר העשרוני 65
אם תכתוב:- char c = 'A';
- char c = 65;
- char c = 0x41;
כל אלו זהים, המחשב רואה אותם אותו הדבר, ההבדל הוא רק בעיניים שלנו
בשלושתם יש אותו קבוע מטיפוס int שמקוצץ לגודל של בית אחד כדי שיוכל להיכנס למשתנה c.
בהתאם לכך, הפקודה printf("%d", 'A') תדפיס למסך את המספר 65
ולעומת זאת הפקודה printf("%c", 65) תדפיס למסך את התו 'A'
הדבר היחיד שקובע מה יודפס הוא אך ורק מחרוזת פורמט ההדפסה שסיפקנו ל־printf.
אם נמשיך לפי אותו עיקרון:- תו הספרה '0' הוא למעשה המספר 48 (דצימלי)
- התו '1' הוא המספר 49
.. - התו '7' הוא המספר 55
.. - התו '9' הוא המספר 57
ולכן אם רוצים לקבל את הערך הנומרי של תו ספרה מסוים, יש להפחית ממנו את התו '0', כי למשל:'7' - '0' = 55 - 48 = 7 שים לב שהתו '0' שמוחסר פה אינו המספר 0, אלא '0'==48 כאמור לעיל.
באותו אופן, אם נרצה לדוגמא לקבל את התו בא״ב האנגלי שנמצא 3 תווים לאחר 'd' – נחברם, כי:'d' + 3 = 100 + 3 = 103 = 'g' ואם נרצה בכלל לוודא שהמשתנה digit מסמל באמת תו ספרה נוכל לכתוב את התנאי:( digit>='0' && digit<='9' ) זה הודות לכך שגם תווי הספרות וגם תווי הא״ב האנגלי מסודרים ברצף בקידוד ה־ASCII.
נערך לאחרונה ע"י ShoobyD בתאריך 07-08-2015 בשעה 06:47.
|