שאלה בC++

Mothers Milk

New member
שאלה בC++

מה ההבדל בין הפונקציה char sum(int x,int b) { return(b+x); } לבין הפונקציה הבאה. int sum(int x,int b) { return(b+x); } שניהן עוברות קימפול בלי שום בעיה, ועובדות טוב...
 

עידית_

New member
נכון, char יכול להכיל גם מספרים, רק

כיוון שהוא בד"כ byte אחד, ו-int שני בתים, התחום שלו קטן יותר. אם אתה לא משתמש במספרים מחוץ לתחומו זה יעבוד אותו הדבר.
 

IdanR

New member
ההבדל הוא...

שהפונקציה הראשונה יכולה להחזיר אך ורק סכומים שגדולים מ128- וקטנים מ 128. int זה לא שני בתים, זה 4 בתים ברוב המקרים... short int לעומת זאת, זה 2 בתים.
 

עידית_

New member
זה משתנה...

short הוא אמנם 2 בתים (ולפעמים 1) long הוא 4 בתים (ולפעמים 8) ו-int עצמו הוא בחלק מהמקרים 2 ובחלק 4.
 

erezsh

New member
תיקון

char מחזיר ערכים בין -128 ל 127. int ללא ספק תלוי בהגדרת המהדר. ב-DOS זה בדר"כ 2 בתים (16-ביט) ובחלונות זה בדר"כ 4 בתים (32-ביט) אבל כלום לא קבוע. Short int אמנם בדר"כ 2 בתים, אבל לפעמים (לדוגמא פסקל) הוא משמש גם כבית אחד.
 

eyall

New member
הגודל של int

הרבה תוכניתנים טועים בנושא זה, התקן קובע מגבלות על ההגדרה של int אבל מאפשר יישום חופשי ע"י הקומפיילרים. הכוונה המקורית היתה שה-int יהיה בגודל המילה המקורי של הפלטפורמה, ואכן למשל במערכות VMS היה נהוג להשתמש בגודל הint ע"י sizeof כדי לבדוק את גודל המילה (אלפא מול וקס). היום הקומפיילרים יודעים לטפל בקלות גם בגדלים שאינם יושבים בגבול אינטגרלי של מילה ולכן כבר לא כ"כ נצמדים לכלל האצבע הזה. התקן אומר שהטווח של int צריך להיות לפחות(!) 32767 ... 32767- ועבור unsigned בין 0 ל- 65535. אבל אלו טווחים מינימליים, למשל MSVC מגדיר 4 בתים עבור int, ואז הטווח גדול יותר. ניתן לראות את הטווחים התיעוד של הקומפיילר או ע"י שימוש ב <limits>. איל לופו
 

ihovav

New member
תשובה מלאה :

גם INT וגם CHAR מכילים מספרים : ההבדל הוא בקיבולת של המשתנה - CHAR מכיל מספרים עד 2 בחזקת 8 ואילו INT מכיל מספרים עד 2 בחזקת 16 או 32 - תלוי במערכת ההפעלה ובסוג הקומפיילר פורמט ה"אסקי" הינו פורמט מיושן שבו השתמשו כדי לייצג תווים ע"ג המחשב - וכל הפונקציות ה"מסורתיות" של C עובדות איתו - הוא מכיל 256 תווים שונים, אנגלית ושפה מקומית. פורמט ה"אסקי" מכיל בדיוק 256 תווים בגלל שזה המספר המקסימלי שנכנס בבייט אחד - ומאחר ו CHAR הוא בייט אחד - משתמשים בו לייצוג תווים אבל חשוב להבין - שהוא בסך הכל מכיל מספר מסויים כמו שאתה יכול להכניס ל CHAR מספר - אתה יכול להכניס ל INT אות - כלומר מספר אסקי של אות - ולהציג אותו כאות כמו"כ חשוב שתדע - שאם סכום החיבור גדול מ256 - התוצאה תהיה שגוייה ולא תקבל אזהרה
 
למעלה