در حالت کلی در C++
نوع دادهی signed char
و unsigned char
رو داریم. وقتی از char
بدون پیشوند علامتدار یا بدون علامت استفاده میکنیم کامپایلر تصمیم میگیره که char
رو بدون علامت در نظر بگیره یا علامتدار و این تصمیم وابسته به کامپایلره.
بنابراین CHAR_MIN
و CHAR_MAX
تبدیل به UCHAR_MIN
و UCHAR_MAX
یا SCHAR_MIN
و SCHAR_MAX
خواهند شد.
در این صورت کافیه که بدونیم این ۴ مقدار چطوری محاسبه میشن. از اونجایی که نوع دادهی کاراکتری در حقیقت عدد صحیح هست. بنابراین در صورت مشخص بودن تعداد بیتهای اون و علامتدار بودن یا بدون علامت بودنش میشه حداکثر و حداقل اون رو تعیین کرد.
مثلاً وقتی که کاراکتر ۸ بیت باشه، حداکثر و حداقل مقدار علامتدارش برابر -۱۲۸
و ۱۲۷
هست. برای بدون علامت هم حداقل و حداکثر ۰
و ۲۵۵
هست.
برای به دست آوردن تعداد بیتهای نوع دادهی کاراکتری ثابت CHAR_BIT
رو بررسی میکنیم که روی هر ماشین مقدار مناسب رو میده.
بنابراین به طور کلی
UCHAR_MIN = 0;
UCHAR_MAX = 2^CHAR_BIT-1;
SCHAR_MIN = -2^(CHAR_BIT-1);
SCHAR_MAX = 2^(CHAR_BIT-1)-1;
CHAR_MIN = UCHAR_MIN || SCHAR_MIN;
CHAR_MAX = UCHAR_MAX || SCHAR_MAX;
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)