Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Аддитивные операции

Мультипликативные операции

Мультипликативные и аддитивные операции

Язык С++ поддерживает стандартный набор арифметических операций:

· умножение /*/

· деление (/)

· взятие остатка от деления(%)

· сложение (+)

· вычитание (-)

С++ поддерживает операцию унарного минуса (a+(-b)), которая выполняет дополнение до двух, а также, в качестве расширения по стандарту ANSI, операцию унарного плюса: (a+(+b)).

Мультипликативные операции *, / и % группируют слева направо. Выполняются обычные арифметические преобразования.

Форма записи:

выражение * выражение выражение / выражение выражение % выражение

Бинарная операция * определяет умножение. Операция * ассоциативна и выражения с несколькими умножениями на одном уровне могут быть реорганизованы компилятором.

Пример:

int i=5; float f=0.2; double g,z; g=f*i;

Бинарная операция / определяет деление. При делении положительных целых округление осуществляется в сторону 0, но если какой-либо из операндов отрицателен, то форма округления является машинно-зависимой. На всех машинах, охватываемых данным руководством, остаток имеет тот же знак, что и делимое. Всегда истинно, что (a/b)*b + a%b равно a (если b не 0).

Пример:

int i=49, j=10, n, m; n = i/j; /* результат 4 */ m = i/(-j); /* результат -4 */

Бинарная операция % дает остаток от деления первого выражения на второе.

Выполняются обычные арифметические преобразования. Операнды не должны быть числами с плавающей точкой. Операция остаток от деления (%) дает остаток от деления первого операнда на второй.

Знак результата зависит от конкретной реализации. В данной реализации знак результата совпадает со знаком делимого. Если второй операнд равен нулю, то выдается сообщение.

Пример:

int n = 49, m = 10, i, j, k, l; i = n % m; /* 9 */ j = n % (-m); /* 9 */ k = (-n) % m; /* -9 */ l = (-n) % (-m); /* -9 */

Аддитивные бинарные операции + и - группируют слева направо. Выполняются обычные арифметические преобразования. Каждая операция имеет некоторые дополнительные возможности, связанные с типами.

Форма записи:

выражение + выражение выражение - выражение

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

Пример:

int i=30000, j=30000, k; k=i+j;

В результате сложения k получит значение равное -5536.

Результатом операции + является сумма операндов. Когда целая величина складывается с указателем, то целая величина преобразуется путем умножения ее на размер памяти, занимаемой величиной, адресуемой указателем.

Когда преобразованная целая величина складывается с величиной указателя, то результатом является указатель, адресующий ячейку памяти, расположенную на целую величину дальше от исходного адреса. Новое значение указателя адресует тот же самый тип данных, что и исходный указатель.

Операция + ассоциативна и выражение с несколькими умножениями на одном уровне может быть реорганизовано компилятором.

Результатом бинарной операции - является разность операндов. Выполняются обычные арифметические преобразования. Кроме того, значение любого целого типа может вычитаться из указателя, в этом случае применяются те же преобразования, что и к сложению.

Возможна следующая комбинация операндов для операций сложения и вычитания:

1. Оба операнда целого или плавающего типа.

2. Оба операнда являются указателями на один и тот же тип.

3. Первый операнд является указателем, а второй - целым.

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

Пример:

double d[10],* u; int i; u = d+2; /* u указывает на третий элемент массива */ i = u-d; /* i принимает значение равное 2 */

Аддитивные унарные операции + и - группируют справа налево.

Форма записи:

+ выражение - выражение

Результатом унарной операции - является отрицание значения ее операнда. Операнд должен иметь целый тип. Выполняются обычные арифметические преобразования. Отрицательное значение беззнаковой величины вычисляется посредством вычитания ее значения из 2n, где n -число битов в целом типа int.

Операции инкремента /++/ и декремента /--/

Операции увеличения (++) и уменьшения (--) являются унарными операциями присваивания. Они соответственно увеличивают или уменьшают значения операнда на единицу. Операнд может быть целого или плавающего типа или типа указатель и должен быть модифицируемым. Операнд целого или плавающего типа увеличиваются (уменьшаются) на единицу. Тип результата соответствует типу операнда. Операнд адресного типа увеличивается или уменьшается на размер объекта, который он адресует. В языке допускается префиксная или постфиксная формы операций увеличения (уменьшения), поэтому значения выражения, использующего операции увеличения (уменьшения) зависит от того, какая из форм указанных операций используется.

Если знак операции стоит перед операндом (префиксная форма записи), то изменение операнда происходит до его использования в выражении и результатом операции является увеличенное или уменьшенное значение операнда.

Форма записи:

++ Выражение;

-- Выражение.

В том случае если знак операции стоит после операнда (постфиксная форма записи), то операнд вначале используется для вычисления выражения, а затем происходит изменение операнда.

Форма записи:

Выражение ++;

Выражение --

Пример:

int t=1, s=2, z, f; z=(t++)*5;

Вначале происходит умножение t*5, а затем увеличение t. В результате получится z=5, t=2.

f=(++s)/3;

Вначале значение s увеличивается, а затем используется в операции деления. В результате получим s=3, f=1.

Пример:

sum = a + b ++;

sum = a + ++b;

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

<== предыдущая лекция | следующая лекция ==>
Унарные, бинарные и тернарное выражения | Операция логическое И
Поделиться с друзьями:


Дата добавления: 2014-01-15; Просмотров: 1330; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.