Такие выражения, как I = I + 2 в которых левая часть повторяется в правой части могут бытьзаписаны в сжатой форме I += 2 используя операцию присваивания вида +=. Большинству бинарных операций (операций подобных +, ко-торые имеют левый и правый операнд) соответствует операцияприсваивания вида оп=, где оп - одна из операций + - * / % << >> & \^ \! Если е1 и е2 - выражения, тое1 оп= е2 эквивалентно е1 = (е1) оп (е2) за исключением того, что выражение е1 вычисляется толькоодин раз. Обратите внимание на круглые скобки вокруг е2: X *= Y + 1 то X = X * (Y + 1) не X = X * Y + 1 В качестве примера приведем функцию BITCOUNT, котораяподсчитывает число равных 1 битов у целого аргумента. BITCOUNT(N) /* COUNT 1 BITS IN N */UNSIGNED N;(INT B;FOR (B = 0; N != 0; N >>= 1) IF (N & 01) B++;RETURN(B);) Не говоря уже о краткости, такие операторы приваиванияимеют то преимущество, что они лучше соответствуют образучеловеческого мышления. Мы говорим: "прибавить 2 к I" или"увеличить I на 2", но не "взять I, прибавить 2 и поместитьрезультат опять в I". Итак, I += 2. Кроме того, в громоздкихвыражениях, подобных YYVAL[YYPV[P3+P4] + YYPV[P1+P2]] += 2 Tакая операция присваивания облегчает понимание программы,так как читатель не должен скрупулезно проверять, являютсяли два длинных выражения действительно одинаковыми, или за-думываться, почему они не совпадают. Такая операция присваи-вания может даже помочь компилятору получить более эффектив-ную программу. Мы уже использовали тот факт, что операция присваиванияимеет некоторое значение и может входить в выражения; самыйтипичный пример WHILE ((C = GETCHAR()) != EOF) присваивания, использующие другие операции присваивания (+=,-= и т.д.) также могут входить в выражения, хотя это случа-ется реже. Типом выражения присваивания является тип его левогооперанда. Упражнение 2-9 --------------- В двоичной системе счисления операция X&(X-1) обнуляетсамый правый равный 1 бит переменной X.(почему?) используйтеэто замечание для написания более быстрой версии функцииBITCOUNT.