Básicamente, quiero verificar si el último bit significativo es un 0. Ya tenía una condición para probar si el bit está configurado o no (o al menos, eso creo):
cells[x + y * cols] & 1 === 1En algún momento, necesito la negación de esto, así que pensé:
cells[x + y * cols] & 1 === 0Pero no obtuve el resultado esperado. Entonces yo solo:
(!cells[x + y * cols] & 1 === 1)Lo que parece más adecuado según el resultado esperado. No obtengo el resultado esperado en realidad, en ambos casos. Tal vez el problema provenga de otro lugar o tal vez solo estoy malinterpretando el uso del operador bit a bit.
Entonces, antes que nada, por qué estas líneas son diferentes:
console.log(!(4 & 1 === 1)); // true console.log(4 & 1 === 0); // 0Quiero decir, obviamente, el LSB de 4 es 0. Aunque diría que el primero es el que necesito...
Debe envolver el 4 & 1 entre paréntesis así
console.log((4 & 1) === 0); Porque si no lo hace, prioriza 1 === 0 que es false y luego 4 & false que es lo mismo que 4 & 0 .