Estoy tratando de entender esta línea de código. ¿Qué le hacen el signo menos y la tilde a r [e] ?:

r = {}
for (e of s)
    r[e] = -~r[e] // What is this specific line assigning?

for (e in r)
    if (r[e] == 1)
        return e
return '_'

El problema que resuelve este código es este (se comenta una línea específica):

Dada una cadena s, busque y devuelva la primera instancia de un carácter no repetido en ella. Si no existe tal carácter, devuelve '_'.

Entiendo las otras líneas excepto la comentada.

4
Dream_Cap 23 feb. 2018 a las 09:41

2 respuestas

La mejor respuesta

Tilde es un unary operator que toma la expresión a su derecha realiza este pequeño algoritmo en ella

-(N+1) // N is the expression right to the tilde

Entonces en su código está incrementando r[e] con 1 (debido a la doble negación).

Vea los ejemplos a continuación:

console.log(~-2); // 1
console.log(~-1); // 0
console.log(~0);  // -1
console.log(~1);  // -2
console.log(~2);  // -3
5
void 23 feb. 2018 a las 06:44

Tilde es el operador bit a bit para NO operación.

Toma un número como operando, lo convierte en un entero de 32 bits (consulte IEEE_754-1985 y voltea todos los bits. 0 se convierte en 1, 1 se convierte en 0.

Por ejemplo, si el número 5 está representado por

00000000 00000000 00000000 00000101

El número ~ 5 es el anterior, con los bits invertidos

11111111 11111111 11111111 11111010

El valor decimal de ~ 5 es (-6). Esto también se conoce como complemento a 2. Dado que los bits más significativos, que representan el signo del número en JavaScript, se invierten, el signo siempre cambiará. El complemento a 2 hace que el valor de X cambie a - (X + 1)

Algunas aplicaciones, como los motores, utilizan estructuras de datos bit a bit y las operaciones bit a bit juegan un papel en ellas.

  • Bitwise OR (|)
  • Y (&) bit a bit
  • Bit a bit NOT (~)
  • XOR bit a bit (^)
  • MAYÚS IZQUIERDA bit a bit (<<)
  • MAYÚS DERECHA bit a bit (>>)
2
hashedram 23 feb. 2018 a las 07:20