Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c++book1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

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

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

мультипликативное_выражение:

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

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

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

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

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

0).

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

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

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

аддитивное_выражение:

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

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

Результатом операции + является сумма операндов. Можно суммировать указатель на объект массива и значение целого ти­па. Последнее во всех случаях преобразуется к смещению адреса с помощью умножения его на длину объекта, на который указыва­ет указатель. Результатом является указатель того же типа, что и исходный указатель, уазывающий на другой объект того же массива и соответствующим образом смещенный от первоначально­го объекта. Так, если P есть указатель на объект массива, то выражение P+1 есть указатель на следующий объект массива.

Никакие другие комбинации типов для указателей не допус­тимы.

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

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

Если вычитаются указатели на объекты одного типа, то ре­зультат преобразуется (посредством деления на длину объекта) к целому, представляющему собой число объектов, разделяющих объекты, указанные указателями. В засисимости от машины ре­зультирующее целое может быть или типа int, или типа long, см. #2.6. Вообще говоря, это преобразование будет давать не­определенный результат кроме тех случаев, когда указатели указывают на объекты одного массива, поскольку указатели, да­же на объекты одинакового типа, не обязательно различаются на величину, кратную длине объекта.

7.5 Операции Сдвига

Операции сдвига << и >> группируют слева направо. Обе выполняют одно обычное арифметическое преобразование над сво­ими операндами, каждый из которых должен быть целым. В этом случае правый операнд преобразуется к типу int; тип результа­та совпадает с типом левого операнда. Результат неопределен, если правый операнд отрицателен или больше или равен длине объекта в битах.

сдвиговое_выражение:

выражение << выражение

выражение >> выражение

Значением Е1 << Е2 является Е1 (рассматриваемое как би­товое представление), сдвинутое влево на Е2 битов; освободив­шиеся биты заполняются нулями. Значением Е1 >> Е2 является Е1 , сдвинутое вправо на Е2 битовых позиций. Гарантируется, что сдвиг вправо является логическим (заполнение нулями), если Е1 является unsigned; в противном случае он может быть арифмети­чевким (заполнение копией знакового бита).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]