2009-12-01 5 views
10

ここでは、私が勉強しているJS暗号化スクリプトの抜粋を示します。JavaScript暗号化スクリプトで使用されるわかりにくい文字

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

誰よりもダブル少ない兆し< <、ならびに単一のパイプを使用することを説明することができます| ?

後のスクリプトでは、記号よりも2倍も大きく>>、また単一のアンパサンド&も発生します。

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

私は、単一の<か>とし、& &論理と論理もちろんよく知って|| 。

思考?

答えて

14

左シフトが8ビットで、ビットごとにORがjです。

<<は左シフト演算子です。変数のビットをシフトし、指定された位置の数だけ残します。

>>は右シフト演算子です。変数のビットを、指定された位置の数だけ右にシフトします。

|はビット単位のOR演算子です。 2つのオペランドの各ビットに対して論理和を実行します。

&はビット単位のAND演算子です。 2つのオペランドの各ビットに対して論理ANDを実行します。

8

< <は、ビット単位の左シフトです。 >>はビット単位の右シフトです。 |ビットごとのORです。 &はビット単位のANDです。詳細については、this referenceを参照してください。

12

| =ビット単位または

1010 
0100 
---- 
1110 

& =ビット単位と

1011 
0110 
---- 
0010 

はそれが& &と同じだと||ちょうど単一ビットで

< <は、二つの乗算は、これを考える011000 別の方法が得られる数字が2つの位置だけ左ので

< 2シフトであり、左シフトである< < Xそう1 == X * 2、X < < 2 == X * 2 * 2というように、それはですので、X * Math.pow(2、n)は0110ので、X <
>> 

ための反対であり、> > 2 ---> 0001 次の2つの除算のようなものと思うが、切り捨てと、それは

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

に等しいので、あなたは '2^N 'は、ありません「2 XOR n「は2をn乗」を意味することを明確にしたい場合がありますすることができます"コメントのために –

+0

ありがとう、それも考えていない。それをMath.powに変更しました(...)これをより明確にするために – Zenon

+1

これは古いスレッドですが、非常に役に立つ回答です。ありがとう! – SwankyLegg

関連する問題