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.
2 respuestas
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
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 (>>)
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.