~
Invierte todos los bits del número del tope: x ~ deja −x − 1, así que 5 ~ da −6 y 0 ~ da −1.
Datos
- Palabra
~- Familia
- Bit a bit
- Pila entera
- saca 1, pone 1
- Qué hace
- Cambia el tope por su complemento: da vuelta los 32 bits, así que x queda en −x − 1. Con la pila vacía deja −1.
- Costo
- Comando de bits
- Se ejecuta en
- dentro de un gen: en la condición (cond) y en el cuerpo (start o else)
~ saca un número, le da vuelta cada uno de sus 32 bits (los 0 pasan a 1 y los 1 a 0) y apila el resultado. En complemento a dos eso equivale siempre a −x − 1:
| Pila antes | Después de ~ |
|---|---|
5 | -6 |
0 | -1 |
-1 | 0 |
4 | -5 |
Su uso típico es armar una máscara para apagar un bit con &: 4 ~ tiene prendidos todos los bits menos el de valor 4, y al hacer & con la celda deja todo igual salvo ese bit.
' apaga el bit de valor 4 de la celda 50, sin tocar los demás
cond
start
*50 4 ~ & 50 store
stopSi la celda 50 valía 5 (bits de valor 1 y 4), queda en 1.
Con la pila vacía opera sobre 0 y deja −1. Las otras operaciones de bits están en Bit a bit.