10-07-2012, 13:16
|
|
|
|
חבר מתאריך: 14.12.09
הודעות: 9,751
|
|
ציטוט:
במקור נכתב על ידי ShoobyD
כמו שאמרו, לא צריך לבצע המרה מ־char ל־int כי בשפת C תווים שקולים למספרים שלמים, רק שהם בגודל בית אחד.
לדוגמא התו 'A' הוא למעשה המספר 65 (דצימלי), לא שאפשר להמיר אותו אליו, אלא שהוא ממש המספר.
|
המממ, לא. ממש לא.- character constant בשפת C (יעני דבר כזה: 'A') בשפת C הוא מטיפוס int (סעיף 6.4.4.4 פסקה 10).
- int חייב להיות מסוגל להחזיק לפחות 2 בחזקת 16 ערכים (סעיף 5.2.4.2.1), מה שאומר שהוא חייב להיות בן 16 ביט לכל הפחות (ביט זה משהו שמסוגל להחזיק בדיוק אחד משני ערכים, סעיף 3.5).
- הגודל של byte אינו מוגדר בדיוק (סעיפים 3.6, 5.2.1, וכו'), אבל בהנחה שאנחנו מדברים על byte בגודל 8 ביט (מה שנקרא octet), מסתבר שלתו (שמוקף במרכאות בודדות) יש טיפוס שלוקח לפחות 2 בתים.
- אם נצרף לזה את העובדה ש-int צריך להיות "בגודל הטבעי" בהתאם לסוג המכונה עליה רצים (סעיף 6.2.5 פסקה 5), זה אומר שעל מעבדי x86 מודרניים (כולל x86-64) הוא כנראה יהיה בגודל 32 ביט, זה 4 בתים.
(כמובן שיכול להיות מצב בו CHAR_BIT הוא 64, והגודל והייצוג של char, short, int, long, long long הם זהים, אבל נצא מנקודת הנחה שלא על זה מדובר.)
http://www.open-std.org/jtc1/sc22/w.../docs/n1124.pdf
אתה יכול גם לבדוק דבר כזה: http://ideone.com/M5w1j
הערה: ב-CPP דווקא שינו את זה, והטיפוס של דבר כמו 'A' הוא char.
_____________________________________
(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס
אמר פסטן: שניהם גרועים, אבל עדיף להיות טיפש מאשר שקרן.
|