בעת שימוש ב- C / C ++ בפלטפורמות אחרות, הסוג int
הוא בדרך כלל 4 בתים (או פוטנציאל יותר). עם זאת, בארדואינו מדובר ב -2 בתים בלבד.
מדוע זה שונה? האם זה משפיע על הביצועים אם אני תמיד משתמש במקום זאת ב -4 בתים long
?
בעת שימוש ב- C / C ++ בפלטפורמות אחרות, הסוג int
הוא בדרך כלל 4 בתים (או פוטנציאל יותר). עם זאת, בארדואינו מדובר ב -2 בתים בלבד.
מדוע זה שונה? האם זה משפיע על הביצועים אם אני תמיד משתמש במקום זאת ב -4 בתים long
?
ה- ATmega328 המשמש בהרבה ארדואינו הוא מיקרו-בקר 8 ביט. המשמעות היא שהרשמים הם 8 ביטים, אוטובוס הנתונים הוא 8 ביטים, היציאות הן 8 ביטים. ישנם כמה היבטים מינימליים של 16 סיביות למערכת (למשל אחד הטיימרים), אך כמעט הכל הוא 8 סיביות.
לכן, רוב הפעולות מטפלות בכל 8 סיביות. עבודה על כל דבר מלבד 8 סיביות (כלומר מספרים שלמים של 16 סיביות או 32 סיביות ומספרי נקודה צפה) דורשת מה שבעצם ניתן לתאר כהדמיית תוכנה, כאשר המהדר משתמש בהוראות מרובות לעבודה על המשתנים הגדולים יותר. p> 8 סיביות הוא כמובן מספיק כדי לטפל ביציאת 8 סיביות. זה גם מספיק כדי להתמודד עם דלפקי לולאה רבים, ערכי החזרה ותווים ASCII. זה לא ממש מספיק כשמדובר במספרים. אינט חתום של 8 סיביות (int8_t) יכול לייצג רק -128 -> +127. לא חתום (uint8_t) יכול לייצג רק 0 -> 255.
מספרים שלמים של 8 סיביות הם די מגבילים. C / C ++ int חייב לייצג לפחות -32,678 -> +32,767 כך שמפות ל- int16_t - הגודל הקטן ביותר שיעשה זאת. זה נותן איזון טוב בין טווח ויעילות. זה חשוב במיוחד כאשר מתחילים לומדים - הצפה אינה באמת דבר שאינם מתכנתים מבינים. פעולה של 8 סיביות, ומשתמשים בכמות גדולה ביותר של רושמים. זה עשוי או לא עשוי להשפיע עליכם.
רבים מאיתנו עוברים לסוגים המקוריים כגון int8_t ו- uint8_t מכיוון שזה נותן לך שליטה רבה יותר.
עובדה חשובה אחת בשפות C ו- C ++ היא שהסטנדרטים שלהם בהתאמה אינם מגדירים את הגודל (בבייטים) של סוגי המספרים האינטגרליים והנקודות הצפות.
הם פשוט מגדירים טווחים מינימליים והקשר בין טווחים אלה. , למשל
טווח (קצר) < = range (int) < range (long)
אז הגודל של למשל int
בדרך כלל תלוי ב: