Операции и выражения присваиван 828k103i 080;я
i = i + 2
i += 2
используя операцию присваиван 828k103i 080;я вида
, которые имеют левый и правый операнд) соответствует операция присваиван 828k103i 080;я вида
- * / % << >> & ^ | .
x *= y + 1
x = x * (y + 1) ,
x = x * y + 1 .
bitcount
n
bitcount(unsigned n)
(
int b;
for (b = 0; n != 0; n >>= 1)
if (n & 01)
b++;
return(b);
)
Не говоря уже о краткости, такие операторы присваиван 828k103i 080;я имеют то преимущество, что они лучше соответствуют образу человеческого мышления.
i i i i i
yyval[yypv[p3+p4] + yypv[p1+p2]] += 2
такая операция присваиван 828k103i 080;я облегчает понимание программы, так как читатель не должен скрупулезно проверять, являются ли два длинных выражения действительно одинаковыми, или задумываться, почему они не совпадают. Такая операция присваиван 828k103i 080;я может даже помочь компилятору получить более эффективную программу.
Мы уже использовали тот факт, что операция присваиван 828k103i 080;я «вырабатывает» значение и может входить в выражения. Самый типичный пример:
while c getchar eof .
Присваиван 828k103i 080;я, использующие другие операции (
Типом выражения присваиван 828k103i 080;я является тип его левого операнда.
x&(x-1) обнуляет самый правый равный 1 бит переменной x bitcount
|