пользователей: 28280
предметов: 12134
вопросов: 228408
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Операторы присваивания. Выражение присваивания.

expression assignment-operator expression 

assignment-operator : one of

   =   *=   /=   %=   +=   –=   <<=   >>=   &=   ^=   |=

Заметки


Операторы присваивания хранится значение в объекте, обозначенном левый операнд. 2 Типа операций назначения. простое присвоение, в котором значения второго операнда хранится в объекте, определенном первым операндом, а назначение смеси, в котором арифметические операторы, операторы миграция или побитовая операция выполняется до сохранить результат. Все операторы присваивания в следующей таблице, отличный от оператора = составные операторы присваивания.

Операторы присваивания

Оператор

Значение

=

Сохранение значения второго операнда в объекте, определенном первым операндом (простым назначением).

*=

Умножьте значение первого операнда значение второго операнда; сохраняет результат в указанном объекте первым операндом.

/=

Разделите значение первого операнда значение второго операнда; сохраняет результат в указанном объекте первым операндом.

%=

Предположим, что модуль первого операнда указанного значения второго операнда; сохраняет результат в указанном объекте первым операндом.

+=

Добавьте значения второго операнда к значению первого операнда; сохраняет результат в указанном объекте первым операндом.

–=

Вычитание значения второго операнда от значения первого операнда; сохраняет результат в указанном объекте первым операндом.

<<=

Сдвигайте значение первого операнда left количество битов, указанных значение второго операнда; сохраняет результат в указанном объекте первым операндом.

>>=

Разрешения сдвигайте значение первого операнда количество битов, указанное значение второго операнда; сохраняет результат в указанном объекте первым операндом.

&=

Получите побитовое И первой и второй операндов. сохраняет результат в указанном объекте первым операндом.

^=

Получите побитовое исключающее ИЛИ первого и второго операндов. сохраняет результат в указанном объекте первым операндом.

|=

Получите побитовое включающее ИЛИ первого и второго операндов. сохраняет результат в указанном объекте первым операндом.

Ключевые слова операторов

3 Из нескольких операторов назначения имеют эквиваленты текста. К ним относятся:

Оператор

Эквивалент

&=

and_eq

|=

or_eq

^=

xor_eq

2 Способа доступа к эти ключевые слова операторов в программах: включите файл заголовка iso646.hили компилировать с /Za (Отключить расширения языка) - параметр компилятора.

 

Выражение присваивания

Присваивание есть выражение, которое записывает новое значение в переменную. Например, присвоим значение один переменной z:

z = 1 После вычисления этого выражения переменная z получит значение один. Старое значение z будет забыто.

Присваивание может также передавать значение цепочки. Например, присвоим значение "this food is good" переменной message:

thing = "food" 
predicate = "good" 
message = "this " 
thing " is "
predicate

(Это также иллюстрирует конкатенацию строк.) Знак `=' называется оператором присваивания. Это простейшая форма оператора, потому что значение операнда справа сохраняется неизменным.

Большинство операторов (сложение, конкатенация и др.) не производят никаких действий кроме вычисления значения. Если значение игнорируется, оператор можно не использовать. Оператор присваивания не такой; он выдает значение, и даже если вы его игнорируете, все равно переменная изменяется. Мы называем это побочным эффектом.

Левый операнд присваивания не обязан быть только переменной (см. раздел 7.3 [Переменные], стр. 79); он может быть также полем (см. раздел 5.4 [Изменение содержимого поля], стр. 42) или элементом массива (см. главу 11 [Массивы в awk], стр. 123). Все они называются lvalues, что значит, что они могут стоять в левой части оператора присваивания. Правосторонний операнд может быть любым выражением; он выдает новое значение, которое присваивание передает в указанную переменную, поле или элемент массива. (Такие значения называются rvalues).

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


 
foo = 1 print foo foo = "bar" print foo

Когда второе присваивание дает foo строковое значение, тот факт, что прежнее значение было числом, забывается. Цепочка, которая не начинается с цифры, имеет численное значение нуля. После исполнения следующего кода значением foo будет пять:


 
foo = "a string" foo = foo + 5

 

(Заметим, что использование переменной в качестве номера, а позднее как цепочки представляет плохой стиль программирования. Предшествующие примеры показывают как awk работает, а не то, как надо писать программу!)

Присваивание есть выражение, поэтому оно имеет значение, то же самое, которое присваивается. Так, `z = 1' как выражение имеет значение один. Одно из следствий этого есть то, что можно писать кратные присваивания:

x = y = z = 0 присваивает значение 0 всем трем переменным. Оно делает это, так как значение выражения `z = 0', равное нулю, передается в y и затем значение `y = z = 0', которое есть ноль, передается в x.

Можно использовать присваивание всюду, где появляется выражение. Например, можно написать `x != (y = 1)' чтобы присвоить переменной y единицу, а затем проверить, равен ли х единице. Но такой стиль делает программу трудной для чтения; нигде кроме разовых программ, не следует употреблять таких нагромождений присваиваний.

Кроме `=', имеется несколько других операторов присваивания, которые выполняют арифметические действия с старым значением переменной. Например, оператор `+=' вычисляет новое значение, добавляя правостороннее значение к старому значению переменной. Так, следующее присваивание добавляет пять к значению foo:

foo += 5

 
Это эквивалентно следующему:

 
foo = foo + 5

 

Используйте тот вариант, который делает вашу программу более ясной. Имеются ситуации, когда употребление `+=' (или другого оператора присваивания) есть не то же самое, что повторение левого операнда в выражении справа. например:


 
# Спасибо  Pat Rankin за этот пример
BEGIN -
foo[rand()] += 5 for (x in foo)
print x, foo[x]
bar[rand()] = bar[rand()] + 5 for (x in bar)
print x, bar[x] ""

 

Индексы при bar будут гарантированно разными , потому что rand будет возвращать разные значения при каждом вызове. (Массивы и функция rand еще не рассматривались. См. главу 11 [Массивы в awk], стр. 123, и см. раздел 2.2 [Встроенные числовые функции], стр. 136). Этот пример иллюстрирует важный факт в отношении операторов присваивания: только выражение слева вычисляется один раз.

То, в каком порядке вычисляются выражения, левое и правое, зависит от реализации. Рассмотрим пример:

i = 1 a[i += 2] = i + 1

 
Значение a[3] может быть либо 2 либо 4.

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

lvalue += increment
Добавляет increment к значению  lvalue для изменения  lvalue.

 
lvalue -= decrement
Вычитает  decrement из значения lvalue.

 
lvalue *= coefficient
Умножает значение lvalue на  coefficient.

 
lvalue /= divisor
Делит значение  lvalue на  divisor.

 
lvalue %= modulus
Присваивает lvalue значение ее остатка по modulus.

 
lvalue ^= power или  lvalue **= power

 

Возводит lvalue в степень power. (Только оператор `^=' указан в POSIX.) Для максимальной переносимости не употребляйте оператор `**='.


27.12.2014; 11:08
хиты: 64
рейтинг:0
Точные науки
информатика
Языки программирования
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2018. All Rights Reserved. помощь