Где я использовал бы побитовый оператор в JavaScript?

При выполнении Докера в Windows тогда, он будет использовать Hyper-V - я нашел, что Hyper-V резервирует набор портов - можно узнать путем выполнения этого:

netsh interface ipv4 show excludedportrange protocol=tcp

На моей машине я видел, что она имела зарезервированный порт 50000. Для освобождения этого порта, я отключил Hyper-V:

dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

После перезагрузок, я зарезервировал порт 50000:

netsh int ipv4 add excludedportrange protocol=tcp startport=50000 numberofports=1

Тогда включил Hyper-V снова:

dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

, Когда это возвратилось, я мог выполнить Jenkins в Докере в Windows:

docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
69
задан mikemaccana 12 January 2018 в 14:40
поделиться

6 ответов

Пример:

Синтаксические анализы шестнадцатеричное значение для получения значений цвета RGB.

var hex = 'ffaadd';
var rgb = parseInt(hex, 16); // rgb is 16755421


var red   = (rgb >> 16) & 0xFF; // returns 255
var green = (rgb >> 8) & 0xFF;  // 170
var blue  = rgb & 0xFF;     // 221  
66
ответ дан timetowonder 24 November 2019 в 13:36
поделиться

Я использовал его однажды для виджет полномочий . Полномочия файла в Unix являются битовой маской, так для парсинга его, необходимо использовать битовые операции.

3
ответ дан troelskn 24 November 2019 в 13:36
поделиться

Битовые маски .

Используемый экстенсивно, например, в событиях JS.

4
ответ дан Yuval Adam 24 November 2019 в 13:36
поделиться

Можно использовать их для зеркального отражения булева значения:

var foo = 1;
var bar = 0;
alert(foo ^= 1);
alert(bar ^= 1);

Это немного глупо, хотя и по большей части побитовые операторы не имеют многих приложений в JavaScript.

10
ответ дан Andrew Hare 24 November 2019 в 13:36
поделиться

Учитывая усовершенствования JavaScript делает (особенно с nodejs, который позволяет серверное программирование с js), в JS существует все более сложный код. Вот несколько экземпляров, где я использовал побитовые операторы:

  • операции IP-адреса:

    //computes the broadcast address based on the mask and a host address
    broadcast = (ip & mask) | (mask ^ 0xFFFFFFFF)
    
    
    //converts a number to an ip adress 
    sprintf(ip, "%i.%i.%i.%i", ((ip_int >> 24) & 0x000000FF),
                             ((ip_int >> 16) & 0x000000FF),
                             ((ip_int >>  8) & 0x000000FF),
                             ( ip_int        & 0x000000FF));
    

Примечание: это - код C, но JS почти идентичен

  • , алгоритмы CRC используют их много

Выезд статья в Википедии на этом

  • операции Разрешения экрана
16
ответ дан Bogdan Gavril MSFT 24 November 2019 в 13:36
поделиться

В JavaScript вы можете использовать двойное побитовое отрицание ( ~~ n ) в качестве замены для Math.floor (n) (если n является положительное число) или parseInt (n, 10) (даже если n отрицательно). n | n и n & n всегда дают те же результаты, что и ~~ n .

var n = Math.PI;
n; // 3.141592653589793
Math.floor(n); // 3
parseInt(n, 10); // 3
~~n; // 3
n|n; // 3
n&n; // 3

// ~~n works as a replacement for parseInt() with negative numbers…
~~(-n); // -3
(-n)|(-n); // -3
(-n)&(-n); // -3
parseInt(-n, 10); // -3
// …although it doesn’t replace Math.floor() for negative numbers
Math.floor(-n); // -4

Одно побитовое отрицание ( ~ ) вычисляет - (parseInt (n, 10) + 1) , поэтому два побитовое отрицание вернет - (- (parseInt (n, 10) + 1) + 1) .

Следует отметить, что из этих трех альтернатив, n | n оказывается самым быстрым .

Обновление: Более точные тесты здесь: http://jsperf.com/rounding-numbers-down

(Как опубликовано на Функция самого странного языка )

{ {1}}
24
ответ дан 24 November 2019 в 13:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: