Что это означает? - PullRequest
       1

Что это означает?

1 голос
/ 29 января 2011

Привет, ребята, вы можете объяснить, что означает «больше, чем знак» в следующем коде

 if (header->mode > forceMode)
      {
        *rate >>= (header->mode - forceMode); //What does this mean >>=
         *granule_frame_size <<= (header->mode - forceMode); //What does this mean <<=
      }

Ответы [ 3 ]

3 голосов
/ 29 января 2011

Хотя все ответы выше верны, возможно, вы все еще не понимаете этого.Вам нужно будет понимать двоичный код.

Представьте, что у вас есть выражение

7 << 2 </p>

Это означает «Преобразовать 7 в двоичный файл, а затем сдвинуть все биты влево 2 раза. "

Итак, 7 равно 00000111

, сдвинутое влево дважды (и вставляя нули), приводит к:

00011100

Это равно 28.

Таким образом, если переменная A равна 7, а B равна 2, то:

A <<= B;

Оставляет A равным 28;

2 голосов
/ 29 января 2011

Операторы << и >> традиционно считаются побитовыми, потому что именно так они реализованы, но для языка C они являются арифметическими операторами (не побитовыми)эквивалентно умножению и делению на соответствующую степень 2. То есть x<<y - это x * 2 ^ y, а x>>y - это x / 2 ^ y (с целочисленным усечением), где под ^ я имею в виду «возведенный в степень»а не "xor".Они определены только для положительных значений x, и, как и все арифметические операторы, << имеет неопределенное поведение для знаковых операндов, если результат переполняется.

2 голосов
/ 29 января 2011

>>= - оператор присваивания вправо. x >>= y эквивалентно x = x >> y (с оговоркой, которую @bdonlan указывает ниже).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...