以下是我正在研究的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;和逻辑||
思想?
答案 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。