Операции присваивания

Есть много операций присваивания, все они группируют слева направо. Все в качестве левого операнда требуют lvalue, и тип выражения присваивания тот же, что и у его левого операнда. Это lvalue не может ссылаться на константу (имя массива, имя функции или const). Значением является значение, хранящееся в левом операнде после выполнения присваивания.

Форма записи: ИдентификаторПеременной ОперацияПрисваивания Выражение ОперацииПрисваивания: = += -= *= /= %= >>= <<= &= ~= |=

При присваиваниях осуществляется преобразование типов; значение правой части преобразуется к типу левой, который и является типом результата (см. арифметические преобразования). Символьные переменные преобразуются в целые либо со знаковым расширением, либо без него, как описано выше. Обратное преобразование int в char ведет себя хорошо - лишние биты высокого порядка просто отбрасываются. Таким образом

int i;char c;...i = c;c = i;

значение 'c' не изменяется. Это верно независимо от того, вовлекается ли знаковое расширение или нет.

Если x типа float, а i типа int, то как

x = i;

так и

i = x;

приводят к преобразованиям; при этом float преобразуется в int отбрасыванием дробной части. Тип double преобразуется во float округлением. Длинные целые преобразуются в более короткие целые и в переменные типа char посредством отбрасывания лишних битов высокого порядка.

Простое присваивание

Операция простого присваивания’ = ’ используется для замены значения левого операнда, значением правого операнда. При присваивании производится преобразование типа правого операнда к типу левого операнда по правилам, упомянутым раньше. Левый операнд должен быть модифицируемым.

Пример:

int t; char f; long z; t=f+z;

Значение переменной f преобразуется к типу long, вычисляется f+z,результат преобразуется к типу int и затем присваивается переменной t.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: