1. Выражение-приведения это пустой (null) указатель.
2. Выражение-приведения это адрес динамической локальной переменной, а выполнение объемлющего блока уже завершено.
Унарная операция плюс +
В выражении
+выражение-приведения
операнд выражение-приведения должен быть
арифметического типа. Результатом является значение операнда
после любых требуемых интегральных действий.
Унврная операция минус -
В выражении
-выражение-приведения
операнд выражение-приведения должен быть арифметического типа. Результатом является отрицательное значение операнда после любых требуемых интегральных действий.
Операция поразрядного дополнения (тильда)
В выражении
<тильда>выражение-приведения
операнд выражение-приведения должен быть интегрального типа.Результатом является поразрядное дополнение операнда после любых требуемых интегральных действий. Каждый бит со значением 0 устанавливается в 1, а каждый единичный бит операнда устанавливается в 0.
Операция логического отрицания !
В выражении
!выражение-приведения
операнд выражение-приведения должен быть скалярного типа. Результат иммет тип int и представляет собой логическое отрицание операнда: 0 при ненулевом операнде и 1 в случае нулевого операнда. Выражение !E эквивалентно выражению (0 ==
Е).
Операция sizeof
Существует два раздельных способа использования операции sizeof:
sizeof унарное-выражение
sizeof (имя-типа)
Размер выделяемой для каждого типа памяти зависит от конкретной машины.
В обоихсучаяхрезультат представляет собой целочисленную константу, выражающую размер в байтах областипамяти, занимаемой операндом (определяемый за некоторыми исключениями типом операнда). В первом случае тип выражения операнда определяется без расчета выражения (и следовательно, без побочных эффектов). Если операнд имеет тип char (signed или unsigned), то операция sizeof дает в результате1. Если операнд не является параметром и имеет тип масива, то результат представляет собой общее количество байтов в массиве (другими словами, имя массива не преобразовавается к типу указателя). Число элементов массива равно sizeof массив/sizeof массив[0].
Если операнд является параметром, объявленным как массив или функция, sizeof дает размер указателя. Применительно к структурам и объединениям sizeof дает общее число байтов, включающее любые символы-заполнители.
Целочисленный тип результата операцииsizeof называется size_t, определенный как unsigned int в stddef.h.
Можно использовать sizeof в директивах препроцессора; это особенность Turbo C++.
C++: В С++ sizeof(тип класса), где тип класса является производным от какого-либо базового класса, возвращает размер базового класса.
Операции типа умножения
Существует три операции типа умножения: * / и %. Синтаксис этих операций следующий:
выражение-типа-умножения:
выражение-приведения
выражение-типа-умножения * выражение-приведения
выражение-типа-умножения / выражение-приведения
выражение-типа-умножения % выражение-приведения
Операнды операций * (умножения) и / (деления) должны быть арифметического типа. Операнды операции % (деление по модулю,или остаток) должны быть интегрального типа. С операндами выполняются обычные арифметические преобразования (см. стр.41 оригинала).
Результатом выполнения операции (операнд1 * операнд2) является произведение двух операндов. Результатами операций (операнд1 / операнд2) и (операнд1 % операнд2) являются частное и остаток от деления, соответственно, где операнд1 делится на операнд2, при условии, что операнд2 не равен нулю. Использование операций / и % с нулевым делителем дает ошибку.
Если операнд1 и операнд2 имеют целочисленный тип, а частное не является целым, то результаты операции следующие:
1. Если операнд1 и операнд2 имеют одинаковый знак, то операнд1/ операнд2 есть наибольшее целое, меньшее чем истинное частное, а операнд1 % операнд2 имеет тот же знак, что и операнд1.
2. Если операнд1 и операнд2 имеют разные знаки, то операнд1/ операнд2 есть наименьшее целое, большее чем истинноечастное, а операнд1 % операнд2 имеет тот же знак, что и операнд1.
Округление всегда выполняется к нулю.
Операции типа сложения
Существует две операции типа сложения: + и -. Синтаксис этих операций следующий:
выражение-типа-сложения:
выражение-типа-умножения
выражение-типа-сложения + выражение-типа-умножения
выражение-типа-сложения - выражение-типа-умножения
Операция сложения +
Допустимыми являются следующие типы операндов выражения операнд1 + операнд2:
1. Операнд1 и операнд2 оба арифметического типа.
2. Операнд1 интегрального типа, а операнд2 является указателем на объект.
3. Операнд2 интегрального типа, а операнд1 является указателем на объект.
В первом случае выполняются стандартные арифметические преобразования операндов, а результатом является их арифметическая сумма. В случаях 2 и 3 применяются правила арифметических действий с указателями. (Арифметические действия с указателями рассматриваются на стр.57 оригинала).
Операция вычитания -
Допустимыми являются следующие типы операндов выражения операнд1 - операнд2:
1. Операнд1 и операнд2 оба арифметического типа.
2. Оба операнда являются указателями на совместимые типы объектов. (Примечание: неквалифицированный тип type рассматривается как совместимый с квалифицированными типами const type, volatile type и const volatile type.)
3. Операнд2 интегрального типа, а операнд1 является указателем на объект.
В первом случае выполняются стандартные арифметические преобразования операндов, а результатом является их арифметическая разность. В случаях 2 и 3 применяются правила арифметических действий с указателями.
Операции поразрядного сдвига
Существует две операции поразрядного сдвига: << и >>. Синтаксис этих операций следующий:
выражение-типа-сдвига:
выражение-типа-сложения
выражение-типа-сдвига << выражение типа сдвига
выражение-типа-сдвига >> выражение типа сдвига
Операция поразрядного сдвига влево <<
В выражении E1 << E2 операнды Е1 и Е2 должны иметь тип int. С Е1 и Е2 выполняются обычные целочисленные действия, а тип результата определяется операндом Е1. Если Е2 отрицателен, либо по числу разрядов больше или равен Е1, то операция неопределена.
Результатом операции E1 << E2 является значение E1, сдвинутое влево на Е2 разрядов и при необходимости заполненное справа нулями. Сдвиг влево unsigned long E1 эквивалентно умножению Е1 на 2 в степени Е2 и редуцированию по модулю ULONG_MAX+1; сдвиг влево unsigned int эквивалентно умножению на 2 в степени Е2 и редуцированию по модулю UINT_MAX+1. Если Е1 это signed int, то результат следует интерпретировать с осторожностью, поскольку знаковый бит изменился.
Константы ULONG_MAX и UINT_MAX определяются в .h-файле.
Операция поразрядного сдвига вправо >>
В выражении E1 >> E2 операнды Е1 и Е2 должны иметь тип int. С Е1 и Е2 выполняются обычные целочисленные действия, а тип результата определяется операндом Е1. Если Е2 отрицателен, либо по числу разрядов больше или равен Е1, то операция неопределена.
Результатом операции E1 >> E2 является значение E1, сдвинутое вправо на Е2 разрядов. Если Е1 имеет тип unsigned, то при необходимости происходит его заполнение нулями слева. Если же Е1 имеет тип signed, то заполнение слева выполняется знаком (0 для положительных и 1 для отрицательных значений). Такое расширение знакового бита гарантирует, что знак у Е1 >> E2 будет таким же, как и у E1. За исключением типов со знаком, значение E1 >> E2 представляет собой целую часть частного.
Операции отношения
Существует четыре операции отношения: < > <= и >=. Синтаксис этих операций следующий:
выражение-отношения:
выражение-типа-сдвига
выражение-отношения < выражение-типа-сдвига
выражение-отношения > выражение-типа-сдвига
выражение-отношения <=выражение-типа-сдвига
выражение-отношения >=выражение-типа-сдвига
Операция меньше чем <
В выражении E1 < E2 операнды должны удовлетворять одному из следующего набора условий:
1. Оба значения Е1 и Е2 - арифметического типа.
2. Оба значения Е1 и Е2 являются указателями квалифицированных или неквалифицированных версий совместимых типов объектов.
Определение квалифицированных имен дается на стр.108 оригинала.
3. Оба значения Е1 и Е2 являются указателями квалифицированных или неквалифицированных версий совместимых неполных типов.
В случае 1 выполняются обычные арифметические преобразования. Результат E1 < E2 имеет тип int. Если значение E1 меньше значения E2, то результат равен 1 (истина); в противном случае результат равен 0 (ложь).
В случаях 2 и 3, где Е1 и Е2 являются указателями совместимых типов, результат операции E1 <E2 зависит от относительного расположения (адресов) двух указываемых ими объектов. При сравнении компонентов одной и той же структуры "старший" указатель обозначает более позднее объявление. В массивах "старший" указатель обозначает большее значение индекса массива. Сравнение указателей компонентов одного объединения дает равенство.
Обычно сравнение указателей разных структур, массивов или объединений , либо сравнение указателей вне диапазона объекта типа массив дает неопределенные результаты; однако исключение делается для указателя "за последним элементом", как указывается в разделе "Арифметические действия с указателями" на стр.57 оригинала. Если Р указывает на элемент массива, а Q указывает на его последний элемент, то выражение H<Q+1 допустимо и дает 1 (истина), хотя Q+1 и не указывает на какой-либо элемент этого массива.
Операция больше чем >
Выражение E1 > E2 дает 1 (истина), если значение Е1 больше значения Е2;в противном случае результат равен 0 (ложь), причем используются те же способы интерпретации арифметических сравнений и сравнений указателей, что определены для операции "больше чем". К операндам применимы те же правила и ограничения.
Операция меньше или равно <=
Аналогичным образом, выражение E1 <= E2 дает 1 (истина), если значение Е1 меньше или равно значению Е2. В противномслучаерезультат равен 0 (ложь), причем используются те же способы интерпретации арифметических сравнений и сравнений указателей, что определены для операции "меньше чем". К операндам применимы те же правила и ограничения.
Операция больше или равно >=
И наконец, выражение E1 >= E2 дает 1 (истина), если значение Е1 больше или равно значению Е2. В противном случае результат равен 0 (ложь), причем используются те же способы интерпретации арифметических сравнений и сравнений указателей, что определены для операции "меньше чем". К операндам применимы те же правила и ограничения.
Операции типа равенства
Существует две операции типа равенства: == и !=. Они проверяют условие равенства операндов арифметического типа и типа указателей, следуя при этом правилам, аналогичным тем, что действуют для операцийотношения. Отметим, однако, что == и != имеют более низкий приоритет выполнения, чем операции отношения <, >, <= и >=. Кроме того, операции == и != позволяют выполнять проверку равенства указателей в таких случаях, где операции отношения неприменимы. Синтаксис этих операций следующий:
выражение-типа-равенства:
выражение-отношения
выражение-типа-равенства == выражение-отношения
выражение-типа-равенства != выражение-отношения
Операция проверки равенства ==
В выражении E1 == E2 операнды должны удовлетворять одному из следующего набора условий:
1. Оба значения Е1 и Е2 - арифметического типа.
2. Оба значения Е1 и Е2 являются указателями квалифицированных или неквалифицированных версий совместимых типов.
3. Одно из значений, Е1 или Е2, является указателем объекта неполного типа, а второй - указателем на квалифицированную или неквалифицированную версию void.
4. Одно из значений, Е1 или Е2, является указателем, а второе - константой типа пустого указателя.
Если Е1 и Е2 имеют тип, являющийся допустимым типом для операций отношения, то применимы правила, подробно описанные для операций отношения типа Е1 < E2, E1 <= T2, и т.д.
В случае 1, например, выполняются обычные арифметические преобразования, а результат операции Е1 == Е2 имеет тип int. Если значение Е1 равно значению Е2, то результат равен 1 (истина); в противном случае результат равен нулю (ложь).
В случае 2 Е1 == Е2 дает 1 (истина), если Е1 и Е2 указывают на один и тот же объект, либо оба указывают на "следующий после последнеего" элемент одного и того же объекта типа массив, либо оба являются пустыми указателями.
Если Е1 и Е2 являются указателями на объекты типа функции, то Е1 == Е2 дает значение 1 (истина), если оба они пустые, либо оба указывают на одну и ту же функцию. И наоборот, если Е1 == Е2 дает 1 (истина), то и Е1, и Е2 указывают на одну и ту же функцию или являются пустыми.
В случае 4 указатель объекта или неполного типа преобразуется к типу другого операнда (указателю квалифицированной или неквалифицированной версии void).
Оператор проверки неравенства !=
Выражение Е1 != Е2 подчиняется тем же правилам, что и ля Е1 == Е2, за исключением того, что результат равен 1 (истина), если операнды неравны, и 0 (ложь) в случае равенства операндов.
Операция поразрядного И &
Синтаксис данной операции следующий:
выражение-И:
выражение-типа-равенства
выражение-И & выражение-равенства
В выражении E1& E2 оба операнда должны быть интегрального типа. Выполняются обычные арифметические преобразования Е1 и Е2, а результатом является поразрядное И для Е1 и Е2. Каждый бит результата определяется в соответствии с таблицей
1.21.
Таблица истинности для поразрядных операций Таблица 1.21
Битовое значение в Е1 в Е2 | Битовое | значение | Е1 | & | E2 | E1 | ^ | E2 | E1 | \! | E2 |
0 0 0 0 1 0 0 1 0 1 0 1 1 1 1 0 | 0 1 1 1 |
Операция поразрядного исключающего ИЛИ^
Синтаксис этой операции следующий:
выражение-исключающее-ИЛИ:
выражение-И
выражение-исключающее-ИЛИ ^ выражение-И
В выражении E1 ^ E2 оба операндадолжныбыть интегрального типа,причем выполняются обычные арифметические преобразования Е1 и Е2, а результатом операции является поразрядное исключающееИЛИ для Е1 и Е2. Каждый бит результата определяется таблицей 1.21.
Операция поразрядного включающего ИЛИ \!
Синтаксис этой операции следующий:
выражение-включающее-ИЛИ:
выражение-исключающее-ИЛИ
выражение-включающее-ИЛИ \! выражение-исключающее-ИЛИ
В выражении E1\! E2 оба операнда должны быть интегрального типа, причем выполняются обычные арифметические преобразования Е1 и Е2, а результатом операции является поразрядное включающее ИЛИ для Е1 и Е2. Каждый бит результата определяется таблицей 1.21.
Операция логического И&&
Синтаксис этой операции следующий:
выражение-логическое-И:
выражение-включающее-ИЛИ
выражение-логическое-И && выражение-включающее-ИЛИ
В выражении E1 && E2 оба операнда должны быть скалярноготипа. Результат операции имеет тип int и равен 1 (истина), если оба значения, Е1 и Е2 ненулевые; в противном случае результат равен 0 (ложь).
В отличие от поразрядной операции &, операция && гарантирует расчет выражения в последовательности слева-направо: первым вычисляется Е1; если Е1 равен 0, то Е1 && E2 дает 0 (ложь), и Е2 не вычисляется вообще.
Операция логического ИЛИ \!\!
Синтаксис этой операции следующий:
выражение-логическое-ИЛИ:
выражение-логическое-И
выражение-логическое-ИЛИ \!\! выражение-логическое-И
В выражении E1 \!\! E2 оба операнда должны быть скалярноготипа. Результат операции имеет тип int и равен 1 (истина), если одно из значений, Е1 или Е2 ненулевое; в противном случае результат равен 0 (ложь).
В отличие от поразрядной операции \!, операция \!\! гарантирует расчет выражения в последовательности слева-направо: первым вычисляется Е1; если Е1 не равен 0, то Е1 \!\! E2 дает 1 (истина), и Е2 не вычисляется вообще.
Условная операция ?:
Синтаксис этой операции следующий:
условное-выражение
выражение-логическое-ИЛИ
выражение-логическое-ИЛИ ? выражение : условное-выражение
В выражении Е1? Е2 : Е3 операнд Е1 должен быть скалярного типа. Операнды Е2 и Е3 должны удовлетворять одному из приводимых ниже правил:
1. Оба операнда - арифметического типа.
2. Оба операнда имеют совместимые типы структуры или объединения.
3. Оба операнда - типа void.
4. Оба операнда имеют тип указателя на квалифицированные или неквалифицированные версии совместимых типов.
5. Один операнд имеет тип указателя, а второй является константой типа пустого указателя.
6. Один операнд имеет тип указателя на объект или неполный тип, а второй - тип указателя на квалифицированную или неквалифицированную версию типа void.
Прежде всего вычисляется Е1; если он имеет ненулевое значение (истина), то Е2 вычисляется, а Е3 игнорируется. Если Е1 дает ноль (ложь), то Е3 вычисляется, а Е2 игнорируется.Результат операции Е1 ? Е2 : Е3 зависит от того, который из операндов, Е2 или Е3, будет вычисляться.
В случае 1 оба операнда, Е2 и Е3, подвергаются обычным арифметическим преобразованиям, а типом результата будетобщий тип, получаемый в результате преобразований.
В случае 2 типом результата будет являться общий тип структуры или объединения Е2 или Е3.
В случае 3 результат будет иметь тип void.
В случаях 4 и5 типом результата является указатель типа, квалифицированного всеми квалификаторами типов, на которые указывают оба операнда.
В случае 6 типом результата будет тип операнда, не являющегося указателем на void.
Операции присвоения
Существует одиннадцать операций присвоения. самым простым из них является операция =; остальные называются составными операциями присвоения.
Синтаксис операций присвоения следующий:
выражение-присвоения:
условное-выражение
унарное-выражение операция присвоения выражение-присвоения
операция-присвоения: одно из
= *= /= %= += -=
<<= >>= &= ^= \!=
Простая операция присвоения =
В выражении Е1 = Е2 Е1 должен быть модифицируемым именующим выражением. Значение Е2 после преобразования к типу Е1 помещается в объект, задаваемый Е1 (замещая предыдущее значение Е1). Значение выражнения присвоения это значение Е1 после присвоения. Само по себе выражение присвоения не является именующим значением.
ОперандыЕ1 и Е2 должны удовлетворять одному из следующего набора правил:
1. Е1 имеет квалифицированный или неквалифицированный арифметический тип, а Е2 имеет арифметический тип.
2. Е1 имеет квалифицированную или неквалифицированную версию типа структуры или объединения, совместимого с типом Е2.
3. Е1 и Е2 это указатели на квалифицированную или неквалифицированную версии совместимых типов , а тип, на который указывает левый операнд, имеет все квалификаторы типа, на который указывает правый операнд.
4. Один из операндов, Е1 или Е2, является указателем объектаили неполного типа, а другой - указвтелем на квалифицированную или неквалифицированную версию void. Тип, на который указываетлевый операнд, имеет все квалификаторы типа, на который указывает правый операнд.
... к сожалению, обратное утверждение не верно. C++ Builder содержит инструменты, которые при помощи drag-and-drop действительно делают разработку визуальной, упрощает программирование благодаря встроенному WYSIWYG - редактору интерфейса и пр. Delphi — язык программирования, который используется в одноимённой среде разработки. Сначала язык назывался Object Pascal. Начиная со среды разработки Delphi ...
... ориентированы на 32 разрядные шинные архитектуры компьютеров с процессорами 80386, 80486 или Pentium. Фирма Novell также подготовила варианты сетевой ОС NetWare, предназначенные для работы под управлением многозадачных, многопользовательских операционных систем OS/2 и UNIX. Версию 3.12 ОС NetWare можно приобрести для 20, 100 или 250 пользователей, а версия 4.0 имеет возможность поддержки до 1000 ...
... завдання поширюється на розробку системи обліку зареєстрованих автомобілів в ДАІ, призначеної для збору, зберігання, а також полегшення для доступу та використання інформації. Програма з обліку зареєстрованих автомобілів в ДАІ, представляє собою, перехід від паперових носіїв інформації до електронних. Система обліку зареєстрованих автомобілів значно допоможе працівникам ДАІ з обліку, аналізу та ...
... меньше времени и ответ клиенту агентство может дать уже в день подачи заявки. Каждая турфирма разрабатывает индивидуальный образец листа бронирования. Согласно Федеральному Закону «Об основах туристской деятельности в Российской Федерации» (гл. IV, ст. 9) – это конкретный заказ туриста или лица, уполномоченного представлять группу туристов, туроператору на формирование туристского продукта. ...
0 комментариев