JavaScript加密脚本中使用的不熟悉的字符

时间:2009-12-01 19:52:00

标签: javascript encryption

以下是我正在研究的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;
}

任何人都可以解释使用双倍小于标志&lt;&lt;,以及单管| ?

稍后在剧本中也出现了大于符号的双重&gt;&gt;,也是单&符号&amp;

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

我熟悉单身&lt;或者&gt;当然还有逻辑&amp;&amp;和逻辑||

思想?

3 个答案:

答案 0 :(得分:14)

左移8位,与j按位或。

<<是左移算子。将变量中的位移位左侧指示的位置数。

>>是右移运营商。将变量中的位向右移动指示的位置数。

|是按位OR运算符。对两个操作数中的每个位执行逻辑OR。

&是按位AND运算符。对两个操作数中的每个位执行逻辑AND。

答案 1 :(得分:12)

| =按位或

1010
0100
----
1110

&安培; =按位和

1011
0110
----
0010

所以它和&amp;&amp;和||只用单个位

&LT;&LT;是左移,所以

0110&lt;&lt; 2将数字左移两个位置,产生011000 另一种想到这个的方法是乘以2,所以x <1 == x * 2,x <&lt; 2 == x * 2 * 2等等,所以它是x * Math.pow(2,n )对于x&lt;

>> 

是相反的,所以0110&gt;&gt; 2 ---&gt; 0001 你可以把它想象成两个除法,但是四舍五入,所以它等于

Math.floor(x/Math.pow(2,n)) 

答案 2 :(得分:8)

&LT;&LT;是一个按位左移。 &GT;&GT;是一个按位正确的转变。 |是一个按位OR。 &安培;是一个按位AND。有关详细信息,请参阅this reference