md5cryptoserviceprovider - Caracteres desconocidos utilizados en el script de cifrado de JavaScript
md5 nativo javascript (3)
<< es un cambio a la izquierda bit a bit. >> es un cambio a la derecha a nivel de bit. | es un O a nivel de bits y es un AND a nivel de bit. Por favor, consulte esta referencia para más información.
Aquí hay un extracto de un script de encriptación JS que estoy estudiando.
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;
}
¿Alguien puede explicar el uso del doble menos de signos <<, así como el único tubo | ?
Más tarde, en el guión, también se producen signos de doble mayor que >>, también signo único &.
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;
}
Estoy familiarizado con single <o> y, por supuesto, con lógica && y lógica || .
¿Pensamientos?
Desplazamiento a la izquierda 8 bits y OR a nivel de bit con j.
<<
es el operador de desplazamiento a la izquierda. Cambia los bits en la variable a la izquierda de la cantidad de posiciones indicadas.
>>
es el operador de desplazamiento correcto. Cambia los bits en la variable a la derecha el número de posición indicado.
|
es el operador O bit a bit. Realiza un OR lógico en cada bit en los dos operandos.
&
es el operador AND bit a bit. Realiza un Y lógico en cada bit en los dos operandos.
| = bitwise o
1010
0100
----
1110
& = a nivel de bit y
1011
0110
----
0010
entonces es lo mismo que && y || solo con los bits individuales
<< es el turno de la izquierda, por lo
0110 << 2 desplaza los números que quedan en dos posiciones, produciendo 011000 de otra manera para pensar que esto es multiplicación por dos, entonces x << 1 == x * 2, x << 2 == x * 2 * 2 y así sucesivamente , entonces es x * Math.pow (2, n) para x <
>>
es lo opuesto, entonces 0110 >> 2 ---> 0001 puedes pensar que es división por dos, PERO con redondeo abajo, entonces es igual
Math.floor(x/Math.pow(2,n))