Читайте также: |
|
Сдвиг вправо может быть арифметическим (то есть освобождающиеся слева разряды заполняются значением знакового разряда) или логическим (освобождающиеся разряды заполняются нулями) в зависимости от реализации транслятора. Пример выполнения операции сдвига вправо:
int x=0xABCD, y;
y=x>>4; //0xFBCD
y=(unsigned int)x>>4; //0xABC
arg1 << arg2
Двоичное представление целочисленного аргумента arg1 сдвигается влево на количество разрядов, равное значению целочисленного аргумента arg2. Освобождающиеся справа разряды заполняются нулями. Например:
int x=0xABCD, y;
y=x<<4; //0xBCD0
Операция условия
expr1? expr2: expr3
Если значение expr1 отлично от нуля, значение операции равно значению
expr2, в противном случае expr3. Например:
y = (x1 > x2)? x1: x2;
Y присваивается наибольшее из значений x1 и x2.
Операции типа y *= expr
В данном случае * обозначает одну из операций, перечисленных в
соответьствующем разделе таблицы. Выражения типа y *= expr эквивалентны
варажениям y = y * expr.
Порядок обработки операндов
Порядок вычисления подвыражений, входящих в выражение, не всегда определен. Например:
int y, i = 1;
y = (i) + (i++);
Здесь, в зависимости от порядка вычисления аргументов, результат может быть 2 или 3.
Только для четырех операций (&& ||?:,) гарантируется, что их левый операнд вычисляется раньше правого операнда. Например, в выражении b=(a=2,a+1) b присвоится значение 3. Отметим, что операция запятая отличается по смыслу от той запятой, которая используется для разделения параметров при вызове функций. Пусть есть выражения:
f1(v[i],i++); // два параметра
f2((v[i],i++)) // один параметр
Вызов функции f1 происходит с двумя параметрами: v[i] и i++, но порядок вычисления выражений параметров не определен. Зависимость вычисления значений фактических параметров от порядка вычислений - далеко не лучший стиль программирования. К тому же программа становится не переносимой. Вызов f2 происходит с одним параметром, являющимся выражением, содержащим операцию запятая: (v[i], i++). Оно эквивалентно i++.
Преобразования типов при вычислении арифметических выражений
Прежде всего каждый операнд типа char или short преобразуется в значение типа int. а операнды типа unsigned char или unsigned short преобразуются в значение типа unsigned int.
Если операнды арифметической операции разных типов, то значение операнда младшего типа преобразуется к типу другого операнда, и затем выполняется операция.
Порядок возрастания типов следующий:
Дата добавления: 2015-07-07; просмотров: 219 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Результат равен 0) | | | Определение триггера |