logo

סוגי אינטגרלים מורחבים (בחירת גודל מספר שלם נכון ב-C/C++)

ל-C/C++ יש הגדרות רופפות מאוד לגבי סוגי הנתונים הבסיסיים של מספרים שלמים (char short int long ו-long long). השפה מבטיחה שהם יכולים לייצג לפחות טווח מסוים של ערכים, אבל כל פלטפורמה מסוימת (חומרת מערכת הפעלה מהדר) עשויה להיות גדולה מזה.
דוגמה טובה היא ארוכה. במכונה אחת זה עשוי להיות 32 סיביות (המינימום הנדרש על ידי C). באחר זה 64 סיביות. מה אתה עושה אם אתה רוצה סוג מספר שלם שאורכו בדיוק 32 סיביות? זה המקום שבו int32_t נכנס לתמונה: זה כינוי לכל סוג מספר שלם שיש למערכת הספציפית שלך שהוא בדיוק 32 סיביות.
תבנית: 
 

  intN_t or uintN_t   Where N is width of integer which can be 8 16 32 64 or any other type width supported by the library.


 



CPP
// C++ program to show use of extended integral types #include    using namespace std; int main() {  uint8_t i; // i with width of exact 8 bits  // Minimum value represented by unsigned 8 bit is 0  i = 0;  cout << "Minimum value of it: "<< (int)i << endl;  // Maximum value represented by unsigned 8 bit is 255  i = 255;  cout << "Maximum value of it: "<< (int)i << endl;  // Warning: large integer implicitly truncated to  // unsigned type. It will print any garbage value  i = 2436;  cout << "Beyond range value of it: " << (int)i << endl;  return 0; } 

תְפוּקָה: 
 

 In function 'int main()': 19:7:   warning  : large integer implicitly truncated to unsigned type [-overflow] i = 2436; ^ Minimum value of i : 0 Maximum value of i : 255 Beyond range value of i : 132


וריאציות שונות  
1. מספר שלם של 8 סיביות ברוחב קבוע ללא סימן: uint8_t  
זה אומר תן לי אינט לא חתום של 8 ביטים בדיוק.
2. רוחב מינימלי ללא סימן של 8 סיביות: uint_least8_t  
זה אומר תן לי את הסוג הקטן ביותר של int לא חתום שיש לו לפחות 8 ביטים. מותאם לצריכת זיכרון.
3. הרוחב המינימלי המהיר ביותר ללא סימן של 8 סיביות: uint_fast8_t  
זה אומר תן לי אינט לא חתום של לפחות 8 ביטים שיהפוך את התוכנית שלי למהירה יותר. הוא עשוי לבחור סוג נתונים גדול יותר בגלל שיקולי יישור. מותאם למהירות.
כך ש-uint8_t מובטח ברוחב של 8 ביטים בדיוק. uint_least8_t הוא המספר השלם הקטן ביותר המובטח ברוחב של לפחות 8 סיביות. uint_fast8_t הוא המספר השלם המהיר ביותר המובטח ברוחב של לפחות 8 ביטים. 
אז טיפוסי האינטגרל המורחבים עוזרים לנו בכתיבה נייד ו יָעִיל קוד.