понедельник, 22 ноября 2010 г.

Второй урок - Типы переменных. (С, Си)

Данный урок, продолжение первого урока.
Раберем типы переменных в C.
Их не много, это символ, он же байт - char принимает значения от 0..255 (или -127 .. +127)
Целочисленное - int - значения целые числа
С плавающей точкой - float
С двойной точностью - double
Тип данных float практически не используется в современном программировании.

Существуют несколько префиксов к типам данных, например знаковость это signed и unsgined.
По умолчанию переменные знаковые (signed), хотя такая запись не будет ошибочной signed int a

В чем различия? В диапазоне принимаемых значений в случае знака это от - до +, в беззнаковом случае(unsigned) от 0 до максимального значения.

Максимальное значение для char это 255 (емкость - 28) , а для int (емкость 232) - в 32 битных системах, в 64 - соотвественно 264, а я помню еще времена когда в int можно было загнать только до 216.

Размер памяти выделяемый для каждой переменной, естественно кратный ее максимальному значению (или наоборот - тут спор как про яйцо и курицу), для char - 1 байт, для int (32) - 4 байта.

Для float - 4 байта, для double - 8 байт.

Также есть префиксы изменяющие размер данных - это short и long
Но не все варианты возможны, скажем для char и float нельзя указывать такой префикс.
Можно только для int и double. Т.к. long float это и есть double, а long char - это наверное int.

Так вот short int - это слово (два байта), т.е. максимальное значение 216
Для long int в bcc и gcc - размер равен что и просто int - двойное слово (четыре байта).
Однако для некоторых компиляторов - long int это int64 - 8 байт.

Вариантам short double тоже несуществует, однако есть long double.
Кстати в разных компиляторах это разные размеры данных. В bcc - 10 байт, а в gcc - 12 байт (на 32битной платформе).

По поводу signed/unsigned - тут стоит заметить что переполнение емкости данных, ведет к разным значениям в зависимости от signed.
Например unsined char a = 255; a+=2, "a" будет равна 1. А char a = 127; a+=2, "a" будет равна -127.

Эта нехитрая ошибка приводит к большому количеству багов и глюков множества программ.

А как же строки, спросит тот редкий читатель, что увидел этот текст.
Все просто - строка это массив символов. Размерность массива указывается в квадратных скобках после имени переменной
Например int a[50]; - целочисленный массив, с 50 элементами. Для доступа к конкретному элементу в квадратных скобках указывается его индекс int b= a[5];.
Массивы можно инициализировать сразу при описании, например int a[5] = {1,2,3};, значения указывается через запятую в фигурных скобках. Значений может быть меньше чем размерность массива, но не больше!

Также и строки char str[10] = {'H','e','l','l','o','!',\0};.
Символы указывается в апострофах, и в ковычках может быть только один символ. char a='aa';//ошибка!!!

Но гораздо легче и проще инициализировать строки (а также использовать их для других целей) через строку заключенную в двойные кавычки char str[10] = "Hello!";.
Следует заметить, что 0-символ ставится автоматически.
Т.е. char str[6]="Hello!"; - не сработает, скажет что размер массива меньше чем количество инициализируемых элементов.
Т.е. "Hello!" автоматически преобразуется в {'H','e','l','l','o','!',\0}


Комментариев нет:

Отправить комментарий