++
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:
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
stopSi 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 --.