Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Двоичное представление целочисленного аргумента arg1 сдвигается вправо на количество разрядов, равное значению целочисленного аргумента arg2.

Читайте также:
  1. III. ДЕТСКИЕ ИГРОВЫЕ ПРЕДСТАВЛЕНИЯ ЛЕТНЕЕ ПРЕДСТАВЛЕНИЕ
  2. IX. ПРЕДСТАВЛЕНИЕ, СУЖДЕНИЕ, ПОНЯТИЕ
  3. XI. Представление
  4. Аргументация
  5. Аргументация и убеждение клиента
  6. В какой срок рассматривается надзорная жалоба или представление прокурора и с какого дня начинается течение этого срока?
  7. В) Иметь представление

Сдвиг вправо может быть арифметическим (то есть освобождающиеся слева разряды заполняются значением знакового разряда) или логическим (освобождающиеся разряды заполняются нулями) в зависимости от реализации транслятора. Пример выполнения операции сдвига вправо:

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 | Нарушение авторских прав


Читайте в этой же книге: Длинная целая константа явно определяется латинской буквой l или L, | Окончание U или u может использоваться для явного задания констант типа | Добавив к описанию типа объекта ключевое слово const, можно превратить |
<== предыдущая страница | следующая страница ==>
Результат равен 0)| Определение триггера

mybiblioteka.su - 2015-2021 год. (0.007 сек.)