# Tipos Com ou Sem Sinal

Um tipo inteiro **sem sinal** pode representar apenas números positivos e zero. Um tipo **com sinal** pode representar tanto números positivos quanto negativos, em um intervalo distribuído quase igualmente em ambos os lados do zero. Por exemplo, `unsigned char` armazena números de 0 a 255 (na maioria dos computadores), enquanto `signed char` armazena números de -128 a 127. Cada um desses tipos possui 256 valores possíveis, já que ambos ocupam 8 bits.

Escreva `signed` ou `unsigned` antes da palavra-chave do tipo para especificar se o tipo é com ou sem sinal. No entanto, os tipos inteiros diferentes de `char` são, por padrão, **com sinal**; com eles, `signed` é um termo redundante.

O `char` simples pode ser **com sinal** ou **sem sinal**; isso depende do compilador, da máquina em uso e do sistema operacional.

Em muitos programas, não faz diferença se `char` é com ou sem sinal. Quando isso for relevante, não deixe ao acaso; escreva explicitamente `signed char` ou `unsigned char`.

***

**Nota pessoal de Richard Stallman**: Uma vez comendo com hackers em um restaurante de peixes, pedi um prato chamado *Arctic Char*. Quando minha refeição chegou, notei que o chef não a havia assinado. Então reclamei: "Este char está sem sinal—eu queria um char com sinal!" Ou, melhor, teria dito isso se tivesse pensado rápido o suficiente.

{% hint style="info" %}
A piada acima funciona em inglês porque, em inglês, "*signed"* também significa "assinado" e no mundo da gastronomia existem os pratos assinados, de chefs famosos/as, etc.
{% endhint %}
