DarwinBotsManual
Abrir la app EnglishEN

++

Suma 1 al número del tope de la pila entera, sin tocar la memoria: 5 ++ deja 6.

Datos

Palabra
++
Familia
Bit a bit
Pila entera
saca 1, pone 1
Qué hace
Cambia el tope por ese número más 1. En el borde de los 32 bits, 2147483647 ++ 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)

x ++ saca un número y apila ese número más 1. 5 ++ da 6, -1 ++ da 0. Para los números que vas a manejar es lo mismo que 1 add, escrito más corto.

El bot Guardian-0.9 (Trafalgar), del Bestiario, lo usa en un truco para convertir cualquier número en una marca de «es cero»: x sgn abs - ++ deja 1 si x es 0 y 0 si no. Paso a paso, con x = −9 y con x = 0:

PalabraPila (x = −9)Pila (x = 0)
sgn−10
abs10
-−10
++01

Multiplicado por un valor, sirve para escribir algo solo cuando una celda está en 0, sin usar condiciones. Este gen guarda 700 en la celda 80 únicamente si estaba vacía:

cond
start
  700 *80 sgn abs - ++ mult *80 add 80 store
stop

Si la celda 80 valía 0, la marca es 1 y se guarda 0 + 700; si ya tenía algo, la marca es 0 y se vuelve a guardar lo que había.

Una rareza heredada, solo en el borde de los 32 bits: ++ sobre el número más grande que entra en la pila (2147483647) da 0 en lugar de dar la vuelta al negativo más grande. Con la pila vacía opera sobre 0 y deja 1. Lo opuesto es --.