BitShift влево (<<), BitShift вправо (>>)

 

Описание
С Bitmath учебник на детской площадке
Есть два оператора битовый сдвиг в C + +: левая << оператор сдвига и право >> Оператор сдвига. Эти операторы вызывают биты в левом операнде быть сдвинуты влево или вправо на количество позиций, указанное в правом операнде. больше по математике Побитовая можно найти здесь.
 
Синтаксис
Переменная number_of_bits <<
Переменная number_of_bits >>
Параметры
Переменная - (BYTE, INT, длинный) number_of_bits целое <= 32
Пример:
    Int = 5; / / двоичное: 0000000000000101
    INT B = << 3; / / двоичное: 0000000000101000, или 40 в десятичной
    Int C = B >> 3; / / двоичное: 0000000000000101, или назад до 5, как мы начали с
Когда вы переносите значение х на у биты (х << у), левый бит у х теряются, буквально смещается из существования:
    Int = 5; / / двоичное: 0000000000000101
    INT B = << 14; / / двоичное: 0100000000000000 - первые 1 в 101 был отброшен
Если вы уверены, что ни один из них в стоимости переносится в Лету, простой способ думать о левом оператор сдвига в том, что он умножает левого операнда на 2, возведенное в правом операнде власти. Например, для получения степени числа 2, следующие выражения можно использовать:
    1 << 0 == 1
    1 << 1 == 2
    1 << 2 == 4
    1 << 3 == 8
    ...
    1 << 8 == 256
    1 << 9 == 512
    1 << 10 == 1024
    ...
Когда вы переносите х правого битами у (х >> у), а старший бит в х-1, поведение зависит от конкретного типа данных х. Если х имеет тип INT, старший бит является знаковым битом, определении х отрицательно или нет, как мы уже говорили выше. В этом случае бит знака копируются в младшие биты, для эзотерических исторические причины:
    Int х = -16; / / двоичное: 1111111111110000
    Int у = х >> 3; / / двоичное: 1111111111111110
Такое поведение, называемое знаковое расширение, зачастую не поведение, которое вы хотите. Вместо этого, вы можете нулей быть смещен с левой. Оказывается, что право правила сдвига различны для неподписанных Int выражениями, так что вы можете использовать приведение типа, чтобы подавить те, копирование слева:
    Int х = -16; / / двоичное: 1111111111110000
    Int у = (неподписанных Int) х >> 3; / / двоичное: 0001111111111110
Если вы осторожны, чтобы избежать распространения знака, вы можете использовать оператор сдвига вправо >> как способ разделить по степеням 2. Например:
    Int х = 1000;
    Int у = х >> 3; / / целочисленное деление в 1000 на 8, в результате чего у = 125.
 

Программирование:

*