|
O bit a bit de los dos números del tope: deja prendido cada bit que esté prendido en alguno de los dos. Sirve para prender marcas.
Datos
- Palabra
|- Familia
- Bit a bit
- Pila entera
- saca 2, pone 1
- Qué hace
- Saca dos números y apila uno con prendidos los bits que están prendidos en alguno de los dos. Con la pila vacía da 0.
- Costo
- Comando de bits
- Se ejecuta en
- dentro de un gen: en la condición (cond) y en el cuerpo (start o else)
a b | saca dos números y deja otro con prendidos todos los bits que estén prendidos en a, en b o en los dos. 12 10 | da 14 (1100 o 1010 es 1110).
Es la forma de prender una marca sin tocar las demás: si la celda ya tenía el bit, queda igual; si no, se suma. Este bot anota en el bit de valor 2 de la celda 50 que alguna vez vio algo con el ojo del medio (.eye5), y la marca le queda para siempre:
' marca que alguna vez vio algo
cond
*.eye5 0 >
start
*50 2 | 50 store
stopCon números que no comparten bits, | es lo mismo que sumar: 4 1 | da 5. Cuando sí comparten, no: 5 1 | sigue dando 5, mientras que 5 1 add da 6. Por eso es más seguro que add para prender marcas: repetirlo no cambia nada.
Para consultar o apagar una marca se usa &; para darla vuelta, ^. Con la pila vacía opera sobre ceros. No hay que confundirlo con or, que combina verdaderos y falsos de la pila booleana.