Незнакомые символы, используемые в скрипте шифрования JavaScript - PullRequest
10 голосов
/ 01 декабря 2009

Вот выдержка из сценария шифрования JS, который я изучаю.

function permutationGenerator(nNumElements) {
    this.nNumElements     = nNumElements;
    this.antranspositions = new Array;
    var k = 0;
    for (i = 0; i < nNumElements - 1; i++)
    for (j = i + 1; j < nNumElements; j++)
    this.antranspositions[ k++ ] = ( i << 8 ) | j;
    // keep two positions as lo and hi byte!
    this.nNumtranspositions = k;
    this.fromCycle = permutationGenerator_fromCycle;
}

Может ли кто-нибудь объяснить использование двойного знака меньше, чем <<, а также одиночной трубы | </p>

Позже в сценарии также встречаются двойные числа, превышающие знаки >>, также одиночный амперсанд &.

function permutationGenerator_fromCycle(anCycle) {
    var anpermutation = new Array(this.nNumElements);
    for (var i = 0; i < this.nNumElements; i++) anpermutation[i] = i;
    for (var i = 0; i < anCycle.length; i++) {
        var nT = this.antranspositions[anCycle[i]];
        var n1 = nT & 255;
        var n2 = (nT >> 8) & 255; // JC
        nT = anpermutation[n1];
        anpermutation[n1] = anpermutation[n2];
        anpermutation[n2] = nT;
    }
    return anpermutation;
}

Я знаком с единственным <или> и, конечно, логическим && и логическим || .

Мысли

Ответы [ 3 ]

14 голосов
/ 01 декабря 2009

Сдвиг влево на 8 бит и побитовое ИЛИ с j.

<< - оператор левого смещения. Сдвигает биты переменной влево на указанное количество позиций.

>> - оператор правого сдвига. Сдвигает биты в переменной вправо на номер указанной позиции.

| - оператор побитового ИЛИ. Выполняет логическое ИЛИ для каждого бита в двух операндах.

& - побитовый оператор AND. Выполняет логическое И для каждого бита в двух операндах.

12 голосов
/ 01 декабря 2009

| = поразрядно или

1010
0100
----
1110

& = поразрядно и

1011
0110
----
0010

так же, как && и || только с единичными битами

<< - сдвиг влево, поэтому </p>

0110

>> 

противоположность, поэтому 0110 >> 2 ---> 0001 Вы можете думать об этом как о делении на два, НО с округлением вниз, так что оно равно

Math.floor(x/Math.pow(2,n)) 
8 голосов
/ 01 декабря 2009

<< - битовый сдвиг влево. >> это битовый сдвиг вправо. | побитовое ИЛИ. & является побитовым И. Пожалуйста, смотрите эту ссылку для получения дополнительной информации.

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