views:

77

answers:

3

Here is an excerpt from a JS encryption script that I am studying.

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;
}

Can anyone explain the use of the double less than signs <<, as well as the single pipe | ?

Later in the script double greater than signs occur as well >>, also single ampersand & .

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;
}

I am familiar with single < or > and of course logical && and logical || .

Thoughts?

+4  A: 

Left shift 8 bits and bitwise OR with j.

<< is the left shift operator. Shifts the bits in the variable left the number of positions indicated.

>> is the right shift operator. Shifts the bits in the variable right the number of position indicated.

| is the bitwise OR operator. Performs a logical OR on each bit in the two operands.

& is the bitwise AND operator. Performs a logical AND on each bit in the two operands.

tvanfosson
+4  A: 

<< is a bitwise left shift. >> is a bitwise right shift. | is a bitwise OR. & is a bitwise AND. Please see this reference for more information.

Ron's Brain
+1  A: 
Zenon
You may want to clarify that `2^n` means "2 raised to the n power", not "2 XOR n".
Matthew Crumley
thanks for the remark, didn't even think of that. changed it to Math.pow(...) to make it clearer
Zenon