Направления программирования. История создания языка Си. Особенности языка, страница 10

Представляет собой операцию присваивания скомбинированную с другой бинарной операцией. Сначала выполняется действие, определенное бинарной операцией, а потом осуществляется присваивание:

<выражение1>+=<выражение2> эквивалентно <выражение1>=<выражени1>+<выражение2>.

-  компактная запись

-  сокращение времени вычисления;

п.6.5.Приаритет и ассоциативность операций.

Порядок вычислений определяется приоритетом операций. Первой выполняется операция, имеющая максимальный приоритет и т.д.. В том случае, когда подряд следуют несколько операций одного вида, то порядок их вычисления определяется ассоциативностью операций. Изменить приоритет выполнения можно с использованием скобок (). Ассоциативность слева направо означает, что первой будет выполняться операция, знак которой записывается левее остальных. Ассоциативность справа налево – аналогично, но правее.

Унарные, тернарные, операции присваивания ассоциируются справа налево, остальные слева направо.

операции

                    max

[ ]                      задание элемента массива

( )                      вызов функции

.                        выбор поля структуры

à                     выделения поля структуры с наименьшим указателем

++, --                инкремент и декремент

sizeof                определение размера объекта или типа в байтах

(тип)                 приведение к типу

~                       побитовое отрицание

!                        логическое не

-                        унарный минус

&                      определение адреса

*                       обращение по адресу

*,/,%/+,-           арифметические операции

<<,>>               операции сдвига

<,<=,>,>=

==,!=                операции отношения    

&                      побитовое и   

^                       побитовое исключающее или

|                        побитовое или

&&                   логическое и

||                        логическое или

?:                      условная операция

=,+=,-=             простое и составное присваивание

,                        последовательное вычисление

min

п.7.Преобразование типов.

Производится либо неявно в процессе присваивания, либо явно в процессе выполнения операции приведения типа.

п.7.1.Неявное преобразование типов.

Если в выражении встречаются операнды различных типов, они приводятся к общему типу и результат, как правило, имеет этот же общий тип. Преобразование операндов осуществляется по следующим правилам:

1)  Типы char, short à int;

float à double.

2)  Если один из операндов имеет тип double, второй также преобразуется к типу double и результат также имеет тип double (вся плав. арифметика в Си выполняется с двойной точностью).

3)  В противном случае, если один из операндов имеет тип long, то и другие преобразуются в long и результат имеет этот же тип.

4)  Если операнд беззнаковый т.е.unsigned,то второй преобразуется к этому типу и результат имеет этот тип. В противном случае операнды должны быть типа int и результат имеет тип int.

5)  Неявное преобразование выполняется при присваивании, тип значения, которое присваивается, преобразуется к типу переменной, получающей это значение. Это возможно в следующих случаях:

1.  Тип левой части – любой арифметический тип.

Тип правой части – арифметический тип.

int i=5;

float f=4.5; i=f; f=i;

(4)  (5.0)

Преобразование f в i осуществляется отбрасыванием дробной части. Преобразование double во float   выполняется округлением. Преобразование длинных целых к более коротким <intàchar> - отбрасываются лишние старшие биты.

1.  Тип левой части –любой тип указателя. В правой части - целочисленная константа 0, NULL. 

2.  Тип левой части - указатель на какой-либо тип, в правой части – объект соответствующего типа.

Частные случаи: