Операция членства
Операция членства (.) используется с именем структуры или объединения для указания члена этой структуры или объединения. Если name — имя структуры или объединения, a member — член, определенный шаблоном структуры, то name.member идентифицирует этот член структуры. Типом name.member является тип, указанный для member. В аналогичной манере операция членства может применяться с объединениями.
Пример
struct {
int code; float cost;
} item;
item.code = 1265;
Приведенный оператор присваивает значение элементу code структуры item.
Операция косвенного членства (или операция указателя на структуру)
Операция косвенного членства (->) используется с указателем на структуру или объединение для идентификации члена этой структуры или объединения. Предположим,
Справочные материалы 837
что ptr str — указатель на структуру, a member — член, определенный шаблоном структуры. Тогда ptrstr->member идентифицирует член структуры, на которую ссылается указатель. В аналогичной манере операция косвенного членства может применяться с объединениями.
Пример
struct {
int code; float cost;
} item, * ptrst;
ptrst = &item;
ptrst->code = 3451;
Этот фрагмент кода присваивает значение члену code структуры item. Следующие три выражения эквивалентны:
ptrst->code item.code (*ptrst).code
побитовые операции
Все описанные ниже побитовые операции за исключением ~ являются бинарными.
~ унарная операция “НЕ”, дающая в результате значение операнда, в котором каждый бит инвертирован.
& операция “И”, дающая в результате значение, в котором каждый бит установлен в 1, если соответствующие биты в обоих операндах равны 1.
I операция “ИЛИ”, дающая в результате значение, в котором каждый бит установлен в 1, когда любой из соответствующих битов операндов либо оба сразу равны 1.
>А операция исключающего “ИЛИ”, дающая в результате значение, в котором каждый бит установлен в 1, когда любой из соответствующих битов операндов (но не оба сразу) равны 1.
<< операция сдвига влево, дающая значение, которое получено в результате сдвига битов левого операнда влево на количество позиций, указанное правым операндом. Освобождаемые места заполняются нулями.
>> операция сдвига вправо, дающая значение, которое получено в результате сдвига битов левого операнда вправо на количество позиций, указанное правым операндом. Для беззнаковых целых освобождаемые места заполняются нулями. Поведение для целых со знаком зависит от реализации.
Примеры
Предположим, что имеются следующие операторы:
int х = 2;
int у = 3;
Тогда х & у дает в результате значение 2, потому что только один бит “включен” как в х, так иву. Кроме того, х << у дает в результате значение 12, поскольку это значение получается, когда битовый шаблон 3 сдвигается на 2 бита влево.
838 Приложение Б
прочие операции
Операция sizeof возвращает размер операнда, находящегося справа, который измерен в единицах, представляющих собой размер значения char. Обычно размер значения char составляет 1 байт. Операнд может быть спецификатором типа в круглых скобках, как в случае sizeof (float), или же именем определенной переменной, массива и тому подобного, как в случае sizeof foo. Типом выражения sizeof является sizet.