نطاقات نوع البيانات ووحدات الماكرو الخاصة بها في C++

في معظم الأوقات في البرمجة التنافسية، هناك حاجة لتعيين المتغير الحد الأقصى أو الحد الأدنى من القيمة التي يمكن أن يحملها نوع البيانات، ولكن تذكر مثل هذا الرقم الكبير والدقيق يصبح مهمة صعبة. لذلك، تحتوي لغة C++ على وحدات ماكرو معينة لتمثيل هذه الأرقام بحيث يمكن تعيينها مباشرة للمتغير دون كتابة الرقم بالكامل فعليًا.

ال يحدد ملف الرأس في C++ وحدات الماكرو التي تمثل الحدود العلوية والسفلية لأنواع البيانات الصحيحة و يحدد وحدات الماكرو للحدود العائمة والمزدوجة. تسمح لك وحدات الماكرو هذه بتعيين هذه القيم القصوى للمتغيرات بسهولة دون كتابتها يدويًا.

دعونا نلقي نظرة على مثال:

C++
   #include          // for int char macros   #include         // for float double macros   #include         using     namespace     std  ;   int     main  ()     {          // Displaying ranges with the help of macros      cout      < <     'char ranges from: '      < <     CHAR_MIN      < <     ' to '       < <     CHAR_MAX      < <     endl  ;      cout      < <     '  n  nshort int ranges from: '      < <     SHRT_MIN       < <     ' to '      < <     SHRT_MAX      < <     endl  ;      cout      < <     '  n  int ranges from: '      < <     INT_MIN      < <     ' to '       < <     INT_MAX      < <     endl  ;      cout      < <     '  n  long int ranges from: '      < <     LONG_MIN      < <     ' to '       < <     LONG_MAX      < <     endl  ;      cout      < <     '  n  float ranges from: '      < <     FLT_MIN      < <     ' to '       < <     FLT_MAX      < <     endl  ;      return     0  ;   }   


الإخراج

 char ranges from: -128 to 127   

nshort int ranges from: -32768 to 32767

int ranges from: -2147483648 to 2147483647

long int ranges from: -9223372036854775808 to 9223372036854775807

float ranges from: 1.17549e-38 to 3.40282e+38

أنواع البيانات ونطاقها وحدات الماكرو

قائمة ببعض وحدات الماكرو لنوع البيانات مذكورة أدناه:

نوع البيانات

يتراوح

ماكرو لقيمة الحد الأدنى

ماكرو لأقصى قيمة

شار

-128 إلى +127

شار_مين

CHAR_MAX

حرف قصير

-128 إلى +127

SCHAR_MIN

SCHAR_MAX

حرف غير موقعة

0 إلى 255

--

Flying_max

كثافة العمليات قصيرة

-32768 إلى +32767

SHRT_MIN

SHRT_MAX

كثافة العمليات قصيرة غير موقعة

0 إلى 65535

--

USHRT_MAX

كثافة العمليات

-2147483648 إلى +2147483647

INT_MIN

INT_MAX

كثافة العمليات غير الموقعة

0 إلى 4294967295

--

UINT_MAX

كثافة العمليات طويلة

-9223372036854775808 إلى +9223372036854775807

LONG_MIN

LONG_MAX

كثافة العمليات طويلة غير موقعة

0 إلى 18446744073709551615

--

Usong_Max

كثافة العمليات طويلة طويلة

-9223372036854775808 إلى +9223372036854775807

Ship_min

LLONG_MAX

كثافة العمليات الطويلة غير الموقعة

0 إلى 18446744073709551615

--

ULLONG_MAX

يطفو

1.17549e-38 إلى 3.40282e+38

Flt_min

FLT_MAX

تعويم (سلبي)

-1.17549e-38 إلى -3.40282e+38

-Lt_min

-FLT_MAX

مزدوج

2.22507e-308 to 1.79769e+308

DBL_MIN

DBL_MAX

مزدوج (سلبي)

-2.22507e-308 to -1.79769e+308

-DBL_MIN

-DBL_MAX

حدود نوع البيانات في C++ الحديثة

إن أسلوب الماكرو أعلاه للحدود العليا والدنيا لنوع البيانات هو أسلوب لغة C القديم الموروث بواسطة C++. لكن لغة C++ لها أيضًا طريقتها الخاصة لتزويد المبرمجين بنفس المعلومات.

يقدم C++ numeric_limits <> قالب الفصل كبديل حديث لوحدات الماكرو هذه. يوفر هذا القالب أسلوبًا أكثر توجهاً للكائنات للوصول إلى حدود أنواع البيانات. يتم تعريفه داخل ملف الرأس.

دعونا نلقي نظرة على مثال:

C++
   #include          #include         using     namespace     std  ;   int     main  ()     {          // Displaying ranges with the help of macros      cout      < <     'short int ranges from: '      < <     numeric_limits   <  short     int  >::  min  ()       < <     ' to '      < <     numeric_limits   <  short     int  >::  max  ()      < <     endl  ;      cout      < <     '  n  int ranges from: '      < <     numeric_limits   <  int  >::  min  ()      < <     ' to '       < <     numeric_limits   <  int  >::  max  ()      < <     endl  ;      cout      < <     '  n  long int ranges from: '      < <     numeric_limits   <  long  >::  min  ()      < <     ' to '       < <     numeric_limits   <  long  >::  max  ()      < <     endl  ;      cout      < <     '  n  float ranges from: '      < <     numeric_limits   <  float  >::  min  ()      < <     ' to '       < <     numeric_limits   <  float  >::  max  ()      < <     endl  ;      return     0  ;   }   


الإخراج

 short int ranges from: -32768 to 32767   

int ranges from: -2147483648 to 2147483647

long int ranges from: -9223372036854775808 to 9223372036854775807

float ranges from: 1.17549e-38 to 3.40282e+38

يوصى باستخدام هذا الأسلوب للعثور على الحدود العليا والسفلى لنوع البيانات بدلاً من وحدات الماكرو لأنه أكثر أمانًا وقابلية للقراءة مقارنة بالنهج المعتمد على الماكرو.