Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Операции автоувеличения и автоуменьшения




(инкремент и декремент)

Эти операции характерны для языков низкого уровня - машинно-зависимых (ассемблеров):

++ - добавление 1 к операнду,

-- - вычитание 1 из операнда.

Следует иметь в виду, однако, что префиксная запись приводит к изменению значения операнда до использования в основном выражении, а постфиксная – после.

Пример.
int a,b,c;

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 выполняется отбрасыванием старших разрядов. Следует учитывать, что, так как операции выполняются справа налево, то многократное присваивание может привести к потере точности.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных