Explico. Quando somamos dois números decimais, frequentemente colocamos um "vai-um" na próxima coluna, assim:
| Soma no sistema decimal |
11 95 + 58 153 |
A soma de dois números hexadecimais não é muito diferente. Somar 3 com F nos dá 2, com um "vai-um" para a próxima coluna:
| Soma decimal |
Soma hexa |
3 + 15 18 |
1 F + 3 12 |
Agora veja o que acontece quando somamos 5 com FF:
| Soma decimal |
Soma hexa |
Soma binária |
1 5 + 255 260 |
11 05 + FF 104 |
1 1111 111 0000 0101 + 1111 1111 1 0000 0100 |
Os "carries" (vai-uns) sucessivos se movem para as posições à esquerda. Se ignorarmos o último 1, porque "estourou" o tamanho do byte, obtemos a resposta 4. Isto significa que FF (255 decimal) se comportou como -1 (5-1=4), portanto, como um número com sinal. Se considerarmos FF como um número sem sinal, o resultado é um erro de overflow porque o byte não consegue guardar o valor hexa 104. O resultado só poderia ser guardado se estivéssemos trabalhando com um bloco de dados word, de 16 bits, ou maior.
Se o número é ou não negativo depende do bit mais significativo do bloco de dados (o bit mais à esquerda), que é conhecido como o "bit de sinal". Se os dados estiverem com o bit de sinal setado, então o número é um número negativo com sinal. Se o bit de sinal estiver zerado, então é um número positivo com sinal. Portanto, é fácil reconhecer um número sinalizado.
Se trabalharmos com words de 16 bits podemos obter valores com números sem sinal que vão de 0 a 65535 (ou de 0000 a FFFF em hexa). Se trabalharmos com números com sinal, metade dos valores serão positivos e a outra metade serão valores negativos. Observe o bit de sinal dos blocos:
| hexa | binário |
| Positivos | 0000 | 0000 0000 0000 0000 |
| ... | ... |
| 7FFF | 0111 1111 1111 1111 |
| Negativos | 8000 | 1000 0000 0000 0000 |
| ... | ... |
| FFFF | 1111 1111 1111 1111 |
Em todas as formas binárias dos números positivos de 16 bits, o bit de sinal (bit 15) é sempre zero. Para todos os números negativos o bit de sinal é sempre 1. O mesmo raciocínio serve para valores armazenados em blocos de 32 bits, onde o bit de sinal é o 31. Se estiver setado, o valor é negativo; se estiver zerado, o valor é positivo. Se considerarmos apenas os inteiros positivos sem sinal o valor varia de 0 a 4.294.967.295. |