double arrow

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

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

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

Аддитивные операции + и - группируются слева направо.Выполняются обычные арифметические преобразования. Для каж-дой операции имеются некоторые дополнительные возможности,связанные с типами операндов. аддитивное _ выражение: выражение + выражение выражение - выражение Результатом операции + является сумма операндов. Можно такжескладывать указатель на объект в массиве и значение любогоцелочисленного типа. Последнее преобразуется в адресноесмещение посредством умножения его на длину объекта, накоторый указывает этот указатель. Результатом является ука-затель того же самого типа, что и исходный указатель, кото-рый указывает на другой объект в том же массиве, смещенныйсоответствующим образом относительно первоначальногообъекта. Таким образом, если p является указателем объекта вмассиве, то выражение p+ 1 является указателем на следующийобъект в этом массиве. Никакие другие комбинации типов для указателей не раз-решаются. Операция + ассоциативна, и выражение с несколькими сло-жениями на одном и том же уровне могут быть переупорядоченыкомпилятором. -15- Результатом операции - является разность операндов.Выполняются обычные арифметические преобразования. Крометого, из указателя может быть вычтено значение любого цело-численного типа, причем, проводятся те же самые преобразова-ния, что и при операции сложения. Если вычитаются два указателя на объекты одинаковоготипа, то результат преобразуется (делением на длину объекта)к типу int, представляя собой число объектов, разделяющихуказываемые объекты. Если эти указатели не на объекты изодного и того же массива, то такое преобразование, вообщеговоря, даст неожиданные результаты, потому что даже указа-тели на объекты одинакового типа не обязаны отличаться навеличину, кратную длине объекта.

Операции сдвига

Операции сдвига << и >> группируются слева направо.Для обеих операций проводятся обычные арифметические преоб-разования их операндов, каждый из которых должен быть целоготипа. Затем правый операнд преобразуется к типу int; резуль-тат имеет тип левого операнда. Результат не определен, еслиправый операнд отрицателен или больше или равен, чем длинаобъекта в битах. выражение _ сдвига: выражение << выражение выражение >> выражение Значением выражения e1<<e2 является e1 (интерпретируемое каккомбинация битов), сдвинутое влево на e2 битов; освобождаю-щиеся биты заполняются нулем. Значением выражения e1 >> e2 является e1, сдвинутое вправо на e2 битовых позиций. Если e1 имеет тип unsigned, то сдвиг вправо гарантированно будетлогическим (заполнение нулем); в противном случае сдвигможет быть (как на CM-ЭВМ) арифметическим (освобождающиесябиты заполняются копией знакового бита).

Операции отношения

Операции отношения группируются слева направо, но этотфакт не очень полезен; выражение a<b<c не означает того, чтооно,казалось бы, должно означать, а означает ((a<b) <c). выражение _ отношения: выражение < выражение выражение > выражение выражение <= выражение выражение > = выражение Операции < (меньше), > (больше), <= (меньше или равно) и > = (больше или равно) дают 0, если указанное отношение ложно,и 1, если оно истинно. Результат имеет тип int. Выполняются -16- обычные арифметические преобразования. Могут сравниватьсядва указателя; результат зависит от относительного располо-жения указываемых объектов в адресном пространстве. Сравне-ние указателей переносимо только в том случае, если указа-тели указывают на объекты из одного и того же массива.

Операции равенства

выражение _ равенства: выражение == выражение выражение!= выражение Операции == (равно) и != (не равно) в точности аналогичныоперациям отношения, за исключением того, что они имеютболее низкий уровень старшинства. (поэтому значение выраже-ния a<b==c<d равно 1 всякий раз, когда выражения a<b и c<d имеют одинаковое значение истинности). Указатель можно сравнивать с целым, но результат будетмашинно-независимым только в том случае, если целым являетсяконстанта 0. Гарантируется, что указатель, которому присво-ено значение 0, не указывает ни на какой объект и на самомделе оказывается равным 0; общепринято считать такой указа-тель нулем.

4.8. Побитовая операция 'и'

выражение _ и: выражение & выражение Операция & является ассоциативной, и включающие & выражениямогут быть переупорядочены компилятором. Выполняются обыч-ные арифметические преобразования; результатом являетсяпобитовая функция ' и ' операндов. Эта операция примениматолько к операндам целого типа.

4.9. Побитовая операция исключающего 'или'

выражение _ исключающего _ или: выражение ^ выражение Операция ^ (знак надчеркивания, код в КОИ-8 0136) являетсяассоциативной, и включающие ^ выражения могут быть переупо-рядочены компилятором. Выполняются обычные арифметическиепреобразования; результатом является побитовая функция иск-лючающего ' или ' операндов. Операция применима только к опе-рандам целочисленного типа.

4.10. Побитовая операция включающего 'или'

выражение _ включающего _ или: выражение | выражение -17- Операция | является ассоциативной, и содержащие | выражениямогут быть переупорядочены. Выполняются обычные арифметичес-кие преобразования; результатом является побитовая функциявключающего ' или ' операндов. Операция применима только коперандам целочисленного типа.

4.11. Логическая операция 'и'

выражение _ логического _ и: выражение && выражение Операция && группируется слева направо. Она возвращает 1,если оба ее операнда отличны от нуля, и 0 в противном слу-чае. В отличие от & операция && гарантирует вычисление слеванаправо; более того, если первый операнд равен 0, то значе-ние второго операнда вообще не вычисляется. Операнды не обязаны быть одинакового типа, но каждый изних должен быть либо одного из основных типов, либо указате-лем. Результат всегда имеет тип int.

4.12. Операция логического 'или'

выражение _ логического _ или: выражение || выражение Операция || группируется слева направо. Она возвращает 1,если один из операндов отличен от нуля, и 0 в противном слу-чае. В отличие от операции | операция || гарантирует вычис-ление слева направо; более того, если первый операнд отличенот нуля, то значение второго операнда вообще не вычисляется. Операнды не обязаны быть одинакового типа, но каждый изних должен быть либо одного из основных типов, либо указате-лем. Результат всегда имеет тип int.

Условная операция

условное _ выражение: выражение? выражение: выражение Условные выражения группируются слева направо. Вычисляетсязначение первого выражения, и если оно отлично от нуля, торезультатом будет значение второго выражения; в противномслучае результатом будет значение третьего выражения. Еслиэто возможно, проводятся обычные арифметические преобразова-ния, с тем, чтобы привести второе и третье выражения кобщему типу; в противном случае, если оба выражения являютсяуказателями одинакового типа, то результат имеет тот же тип;в противном случае одно выражение должно быть указателем, адругое - константой 0, и результат будет иметь тип указа-теля. Вычисляется только одно из второго и третьего выраже-ний. -18-

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: