Операции присваивания. Прочие операции


Это операции =, +=, -=, *= и так далее. Их трактовка следующая – если е1 и е2 выражения и ор-операция, то е1 ор = е2

эквивалентно

е1 = е1 ор е2

Такое представление дает возможность получать более надежную программу за счет исключения ошибок при переписывании идентификаторов.

Пример.

int arr1[20];

……………

arr[i]*=a*2;

Что эквивалентно:

arr1[i]=arr1[i]*a*2;

1) Это легко можно было потерять при набивке.

2) Запись короче.

Тип операции присваивания – тип левого операнда. Аргументы

функций преобразовываются в соответствии с правилами приведения типов арифметических выражений. Поэтому аргументы функции должны быть описаны как int и double , в том случае, если фактические параметры типа char и float. Это правило можно обойти, если использовать прототипы функций, о которых далее. Использование прототипа это фактически размещение перед параметром операции (тип) в вызовах функций.

Прочие операции

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

&-поразрядное И;

| - поразрядное ИЛИ;

^ - поразрядное исключающее ИЛИ;

<< - сдвиг влево;

>> - сдвиг вправо;

~ - обращение (унарная операция).

Работа с разрядами необходима, когда проверяются разряды регистров состояний каких-либо устройств или процессора.

Примеры

i = i&077; Выделяются младшие из разрядов, а все старшие разряды

устанавливаются в 0.

MASK= 0101;

x = x |MASK; Устанавливаются в “1” те разряды в х, которым

соответствуют 1 вMASK, а остальные неизменны.

k = 01;

O =017;

Y = k ^ O; В результате у = 016.

 

Операции сдвига << и >> выполняют сдвиг левого операнда влево или вправо на число, разрядов, задаваемое правым операндом.

7<

7>>5 результат 0.

При сдвиге вправо возможно размножение знака, то есть отрицательное число, представленное 1 в знаковом разряде, начнет “размножать” единицу знака в правые разряды.

 

Операция ~ - унарная, она инвертирует любой двоичный разряд.

Пример.

Считается, что x&~077 предпочтительнее, чем x&0177700, поскольку последняя запись жестко ориентирована на 16 разрядное слово, но х может быть и типа long. X&~077 дает в результате младшие 6 разрядов в нуле, а остальные неизменными.

Операции “sizeof” и запятая “,” используются соответственно для определения длины объекта в байтах и перечисления выражений не нарушая семантики операторов.

Пример

char *ptr;

ptr = (str*)calloc(numb,sizeof(str));

Функция callloc() возвращает указатель типа char*, который ссылается на выделенную для размещения данных heap-память. В запросе указано число numb элементов и размер каждого. Предполагается, что str – имя типа (например, структурного).

Если указано выражение вида …е1, е2, е3…, то последнее е3 определяет результат этой последовательности. Это можно использовать в программе, например, следующим образом :

for (i=A, j=B, k = C; i<j; i++, j--)

{

p[i] = p[j];

……………..

}

Здесь в цикле используется одновременно 2 переменные цикла i и j. Кроме того, независимо от них инициализируется переменная k.

Вопросы для самоконтроля

  • Что означает тип unsigned?
  • Допустимы ли в Турбо с 2-символьные константы?
  • Какого типа следующие константы – 5.6e-7, 5.6E-7f?
  • Что означает термин «константное выражение»?
  • Перечислите классы памяти в языке С!
  • Особенности инициализации классов памяти?
  • В каких случаях применяется тип void?
  • Приоритеты каких операций выше-ниже: арифметических, логических, сравнения?
  • Как выглядят и выполняются побитовые логические операции и сдвиговые операции?
  • Каковы особенности выполнения автоинкрементных операций?

Вопросы для самостоятельного изучения

  • Как записываются в программе литерные строки (строковые литералы)?
  • Как декларируются переменные перечислимого типа, как инициализируются символьне константы этого типа и какие операции применимы к указаному типу даннях?

 



Дата добавления: 2016-05-26; просмотров: 1302;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.