ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Операции автоувеличения и автоуменьшения(инкремент и декремент) Эти операции характерны для языков низкого уровня - машинно-зависимых (ассемблеров): ++ - добавление 1 к операнду, -- - вычитание 1 из операнда. Следует иметь в виду, однако, что префиксная запись приводит к изменению значения операнда до использования в основном выражении, а постфиксная – после. Пример. a=b=1; c=++a+b; /*c станет равным 3 */ c=a+b--; /*a станет равным 2 */ /*c станет равным 3 */ /*b станет равным 0 */
Пример. В ранее представленной функции getline () оператор if (c==’\n’){ s[i]=c; ++i; } можно заменить более компактным: if (c==’\n’)s[i++]=c; заменяя на s[++i]=c изменит смысл программы, т.е. это будет неверно. Задача. Пусть i =j=20. Какие значения индекса используются в выражении оператора while для проверки while ((s[i++])=t[j++]!=’\0’); и что выполняется в этом операторе? Правила приведения типов в выражениях В большинстве случаев преобразование типов в арифметических выражениях выполняется автоматически. Имеется и операция, задающая явное преобразование: «(тип) преобразуемое_выражение». Пример а=sqrt((double)n); Если n целого типа, то его значение преобразовывается к типу double. Если тип float, то такое преобразование выполняется автоматически без указания (double) перед n, то есть можно было бы указать: a = sqrt(n); Символьные константы в Си имеют тип int. Поэтому ‘0’, например, это код, который свободно исполняется в выражениях, например, с-‘0’. При преобразовании значений символьных переменных к целым значениям, а это выполняется в арифметических выражениях всегда, используется распространение знака, то есть если старшем разряде 1, то эта 1 заполняет весь старший байт. В Турбо-Си, однако, можно объявлять: unsigned char, и тогда распространение знака не производится. Пример unsigned char c; Неявное преобразование типов в арифметических выражениях выполняется в следующей последовательности: 1. Операнды типов преобраз. в тип {signed,unsigned}оpt char short int enum float double unsigned short unsigned int 2. Теперь все операнды могут быть следующих типов: {long} оpt double, либо {unsigned} оpt {long} оpt int. Для этих оставшихся, преобразования выполняются следующим образом в порядке приоритетов: · если один из операндов типа long double, то - к этому типу, · если один из операндов типа double, то - к этому типу и так далее. Все это можно представить иерархией типов, которая учитывает диапазон данных: long double Следует учесть, что в Турбо-Си эти типы эквивалентны double unsigned long long unsigned int 3. Если правила не сработали, то тип int и тип результата тоже int.
Пример unsigned int a; double b; ……………. a=a+b; /*тип результата а+в –double, но изменится при присваивании к типу*/ /*unsigned int*/ Преобразование выполняется к типу переменной слева от символа присваивания a=b=z+d; z + d преобразуется к типу в b преобразуется к типу а При присваивании преобразование из float в int приведет к отбрасыванию дробной части, а double к float преобразуется путем округления. Из целых преобразование в короткие short или char выполняется отбрасыванием старших разрядов. Следует учитывать, что, так как операции выполняются справа налево, то многократное присваивание может привести к потере точности. Не нашли, что искали? Воспользуйтесь поиском:
|