Digite um número em qualquer base — ou uma conta inteira, como 0x7FCF34 + 0x20 ou (0x1234 >> 4) & 0xF — e veja o resultado em decimal, hexa, binário e octal, bit a bit e byte a byte.
A conta é exata. Os números são inteiros de precisão arbitrária (BigInt), e cada passo é
reduzido à largura escolhida — como o registrador faria. Por isso 0xFFFFFFFF + 1 dá 0 em 32 bits, e a
página avisa que deu a volta.
Ordem de precedência, a mesma do C, da que amarra mais para a que amarra menos:
~ - (unários) → * / % → + - → << >> >>> →
& → ^ → |. Na dúvida, use parênteses: a & 0xF << 4 é
a & (0xF << 4).
Deslocamento à direita. Com "sem sinal", >> é lógico (entra zero). Com "com sinal", é
aritmético (repete o bit de sinal) — é a diferença entre srw e sraw no PowerPC, ou
sh e sha no TriCore. >>> é sempre lógico. Divisão trunca em direção a
zero e o resto tem o sinal do dividendo, como em C.
Funções:
rol(x, n) e ror(x, n) — giram x dentro da largura.
bswap(x) — inverte a ordem dos bytes (big ↔ little-endian).
sext(x, bits) — estende o sinal de um valor de bits bits: sext(0xFF, 8) = −1.
zext(x, bits) — fica só com os bits bits baixos.
extr(x, pos, largura) — extrai um campo de bits, como o extr.u do TriCore.
bit(n) — 1 << n. mask(mb, me) — a máscara do rlwinm do PowerPC, com MB e ME
na numeração do manual (bit 0 = mais significativo), em 32 bits.
clz(x), popcnt(x), abs(x), min(a, b), max(a, b).
ans — o último valor guardado no histórico.
Ponto flutuante. Os 32 bits baixos são lidos como float IEEE 754 — é como um mapa ou uma
constante em float aparece no hex dump. Em 64 bits, a palavra inteira também é lida como double.