Page 121 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 121

программирования, таким как ассемблер или  С1,  или  нет никакого представления
       о том, как компьютер внутренне хранит числа, вам,  возможно, захочется изучить
       сначала эти темы (вы также можете пропустить или только просмотреть этот раз­
       дел, поскольку лишь в некоторых приложениях требуются побитовые операторы).
       Побитовые операторы обрабатывают свои операнды как 32-разрядные целые числа
       со знаком, представленные в  двоичном дополнительном коде. Поскольку все числа
       в JavaScript - с двойной точностью, JavaScript преобразует их в 32-разрядные целые
       числа, прежде чем выполнять побитовые операторы, а затем преобразует их обратно
       в числа двойной точности, прежде чем возвратить результат.
          Побитовые  операторы,  подобно  логическим  операторам,  выполняют  логиче­
       ские операции (И, ИЛИ, НЕ, XOR), но с каждым отдельным битом целого числа. В

       табл.  5.7 показано, что среди  побитовых операторов есть также операторы сдвига,
       позволяющие переместить все биты числа влево или вправо на нужно количество
       разрядов.
       Таблица 5 .7.  Побитовые операторы

        Оператор  Описание           Пример
        &         Побитовое AND      О Ы  О l О    &  ОЫl О О    1 1   рез у льта т :   оы ооо
                  Побитовое OR       ОЫО 1 0    ОЫl О О    1 1   рез у ль та т :  ОЫ1 1 0
                  Побитовое XOR      ОЫ0 1 0    л   ОЫl О О    1 1   рез у ль та т :  ОЬ011 0
                  Побитовое NOT      - О Ы  О 1 0      1 1   рез у ль та т :  ОЬ0 1 0 1
        <<        Сдвиг влево        ОЫО 1 0   «  1   1 1   рез у ль та т :  ОЫ О1 00
                                     ОЫО 1 0   «  2   1 1   рез у ль та т :  ОЫ Оl ООО
        >>        Сдвиг вправо       (См. ниже)
        >>>       Сдвиг вправо с запол- (См. ниже)
                  нением н у лями
          Обратите внимание, что сдвиг влево фактически умножает число на два, а сдвиг
       вправо фактически делит его на два и округляет в меньшую сторону.
          В двоичном дополнительном коде крайний слева бит обозначает знак числа. Для
       отрицательных чисел он содержит 1 ,   а для положительных  - О, следовательно, есть
       два способа выполнить сдвиг вправо. Давайте возьмем, например, число -22. Если
       мы хотим получить его двоичное представление, начнем с положительного числа 22,
       представим его в  обратном коде ( т.е. инвертируем все его биты),  а затем добавим
       к полученному результату единицу, чтобы получить двоичный дополнительный код.

       let  n  =  22   / /   32-разрядное  двоичное  число :
                                                                    0
                   1 1                      00000000000000000000000000 1 0 1 1 0
       n  > >   1   / /                     00000000000000000000000000001011
       n  >>>  1   //                       00000000000000000000000000001 011
       n  =  -n    / /   обратный  код  числа :  1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 01

       1 Язык С многие современные эксперты в  программировании  относят  к  низкоуровневым, хотя,
       строго говоря, это не так.  - П р имеч. ред.

       120      Глава 5.  Выражения и операторы
   116   117   118   119   120   121   122   123   124   125   126