Ещё на ранних этапах наших занятий я говорил об разницах типов данных.Напомню,char берёт на себя максимальное число 255.Но если вы соберёте такую программу:
int main()
{
char a=250;
printf("%d\n",a);
return 0;
}
То вы неожиданно получите число -6.Что-то здесь не чисто.
Давайте разбираться.При создании любой переменной она получает свой модификатор,ранее мы уже рассматривали один из них,а именно const.Из простой переменной получалась неизменяемая.
В случае,когда модификатор не был явно указан переменная как минимум создаётся с модификатором signed.Или знаковой.Это значит что мы рассчитываем что в переменную возможно попадание отрицательных чисел.Тут-то наш диапазон в char смещается не от 0 до 255,а от -127 до 126.
Вот вам пример:
int main()
{
signed char a=-50;
char b=-250;
printf("%d %d\n",a,b);
return 0;
}
Компилятор предупредит,что в переменную b -250 число никак не может поместиться и заменит её на 6.В случае же с переменной a-всё будет в порядке.
А если мы уверены,что отрицательное число никак не попадёт в нашу переменную? В этом поможет модификатор unsigned или "беззнаковый".
int main()
{
unsigned char a=250;
printf("%d\n",a);
return 0;
}
Соберите программу и посмотрите что будет.
На этом изменения диапазона у си не заканчиваются.К примеру,если вы хотите сэкономить память-можно использовать вместо int модификатор short,который используется уже не до 4,3 млрд. ,а до 65535.Вообще short можно использовать только с int,а можно и вовсе без него:
int main()
{
unsigned short a=65535;
printf("%d\n",a);
return 0;
}
Всё то же самое,если не добавить модификатор unsigned-то число 65535 не поместится,а будет принимать от -32768 до 32767.
Данный модификатор применятся лишь для int,на char или любой другой тип компилятор вас отругает и поставит в угол,но вот модификатор long можно использовать и с типом double.
Long увеличивает предел числа в два раза,то есть вместо 4,3 млрд можно использоваться 2 в 64 степени.Признаться я даже таких чисел не знаю.Long,как и short можно использовать без int,по умолчанию он и будет:
int main()
{
long a=500;
double long tmp=10.2;
printf("%d %2.f\n",a,tmp);
return 0;
}
Это конечно ещё далеко не все модификаторы типов данных в си,мы рассмотрели лишь те,что могут расширить числовой диапазон или изменить.Не забудьте самостоятельно проанализировать и подумать,где это можно применить.
С вами был D21nkMaster.Всего доброго!