Las vacaciones de Año Nuevo llegarán pronto y finalmente tengo tiempo libre. Visito varios artículos técnicos todos los días, y esto está en un gran estado.
Leí un artículo sobre JS por la tarde, y hay un párrafo como este que me llamó la atención.
La copia del código es la siguiente:
(función () {
Var nombres = [];
Función de retorno (nombre) {
AddName (nombre);
}
función addname (nombre) {
if (! ~ names.indexof (nombre)) // Si existe, no agregue
nombres.push (nombre);
console.log (nombres); // ["Linkfly"]
}
} ()) ('linkfly');
¿Qué significa el operador "! ~" En if (! ~ Nombres.indexof (nombre))? Si no entiende, comience con ~ primero.
Las pruebas pueden mostrar que el valor del resultado tiene esta regla: (x+1)
Después de buscar, algunos artículos solo pierden una oración: gírela invertida por binario
Desde el significado literal, aquí usamos representación binaria de ocho dígitos: 3 = 00000011, luego ~ 3 = 11111100, la fórmula anterior es incorrecta.
La explicación anterior sigue siendo demasiado abstracta y no específica. De hecho, esto implica el conocimiento del código original, el código inverso y el código de complemento.
Código original
El bit más alto de la representación del código original es el bit de signo, que es 0 para indicar un número positivo y 1 para indicar un número negativo. Los bits restantes representan el valor absoluto del número.
Código inverso
Para un número firmado, el código inverso de un número positivo es el mismo que su código original; El código inverso de un número negativo es el bit inverso de los bits, excepto el bit de signo. El código inverso a menudo se usa como una forma intermedia en el proceso de encontrar el código del complemento.
Complementar
El complemento de un número positivo es el mismo que su código original y su código inverso; El complemento de un número negativo es invertir su código original, excepto el bit de signo, y agregar 1 al último bit, es decir, agregar 1 al complemento del número. Los números en las computadoras generalmente se expresan en forma de complemento. En el código del complemento, (-128) D se usa en lugar de (-0) d. Nota: (-128) D no tiene el código original y el código inverso correspondiente, (-128) d = (1000,000) b.
Encontrar operaciones complementarias
La operación del complemento no considera los bits de signo, sino que invierte los bits originales de su código original y agrega 1 al último bit. El complemento de un número es el complemento del número opuesto.
Tome el ejemplo del artículo del autor y comprenda
~ significa inversión bit a bit. Si es 00111, se convierte en 11000 (inversión bit a bit)
La representación binaria de 57 es (1 byte): 00111001
Binary después de la inversión bit a bit (~ 57): 11000110 Esto se expresa como decimal: -70
Este es un número negativo, un número firmado. Los números negativos deben expresarse en la computadora utilizando su código de complemento: complemento = el bit del símbolo está invertido y luego se agregó 1.
Por lo tanto, después de que el bit de signo -70 (11000110) se invertida después de bit a bit, es (10111001) y luego agregar 1, es (10111010)
Cambio al sistema decimal: -58
Por lo tanto ~ 57 = -58
En este punto, finalmente lo descubrí. Aunque la fórmula resumida puede obtener rápidamente resultados, no puede explicar por qué. Como técnicos, nos gusta estudiar y profundizar en los detalles.
Dar tiempo:
La base es la piedra angular de todos los niveles superiores. Si te dedicas a practicar el taoísmo, el camino es largo.
Lo anterior es todo el contenido de este artículo. Espero que todos puedan ganar algo.