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

5. Объекты и Lvalue (Адреса)

Объект есть область памяти. lvalue (адрес) есть выраже­ние, ссылающееся на объект. Очевидный пример адресного выра­жения - имя объекта. Есть операции, дающие адресные выраже­ния: например, если Е - выражение типа указатель, то *Е - адресное выражение, ссылающееся на объект, на который указы­вает Е. Термин "lvalue" происходит из выражения присваивания Е1=Е2, в котором левый операнд Е1 должен быть адресным (value) выражением. Ниже при обсуждении каждого оператора указывается, требует ли он адресные операнды и возвращает ли он адресное значение.

6. Преобразования

Определенные операции могут в зависимости от их операн­дов вызывать преобразование значения операнда от одного типа к другому. В этой части объясняется, каков ожидаемый резуль­тат таких преобразований. В #6.6 содержится краткое описание преобразований, требуемых наиболее стандартными операциями; оно будет дополняться по мере надобности в процессе обсужде­ния каждой операции. В #8.5.6 описываются преобразования, оп­ределяемые пользователем.

6.1 Символы и Целые

Символ или короткое целое могут использоваться, если мо­жет использоваться целое. Во всех случаях значение преобразуется к целому. Преобразование короткого целого к длинному всегда включает в себя знаковое расширение; целые являются величинами со знаком. Содержат символы знаковый раз­ряд или нет, является машинно зависимым, см. #2.6. Более яв­ный тип unsigned char ограничивает изменение значения от 0 до машинно зависимого максимума.

В машинах, где символы рассматриваются как имеющие знак (знаковые), символы множества кода ASCII являются положитель­ными. Однако, символьная константа, заданная восьмеричной escпоследовательностью подвергается знаковому расширению и может стать отрицательным числом; так например, '\377' имеет значение -1.

Когда длинное целое преобразуется в короткое или в char, оно урезается влево; избыточные биты просто теряются.

6.2 Float и Double

Для выражений float могут выполняться действия арифмети­ки с плавающей точкой одинарной точности. Преобразования меж­ду числами одинарной и двойной точности выполняются настолько математически корректно, насколько позволяет аппаратура.

6.3 Плавающие и Целые

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

Преобразование целочисленного значения в плавающий тип выполняются хорошо. При нехватке в аппаратной реализации тре­буемых бит возникает некоторая потеря точности.

6.4 Указатели и Целые

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

Можно производить вычитание над двумя указателями на объекты одного типа; в этом случае результат преобразуется к типу int или long в зависимости от машины, см. #7.4.

6.5 Unsigned

Всегда при сочетании целого без знака и обычного целого обычное целое преобразуется к типу unsigned и результат имеет тип unsigned. Значением является наименьшее целое без знака, равное целому со знаком (mod 2**(размер слова)) (т.е. по мо­дулю 2**(размер слова)). В дополнительном двоичном представ­лении это преобразование является пустым, и никаких реальных изменений в двоичном представлении не происходит.

При преобразовании целого без знака в длинное значение результата численно совпадает со значением целого без знака. Таким образом, преобразование сводится к дополнению нулями слева.

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