DarwinBotsManual
Abrir la app EnglishEN

|

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
stop

Con 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.