unsigned int

Descrição

No UNO e outras placas baseadas nos microcontroladores ATmega, unsigned ints (inteiros sem sinal) são o mesmo que o tipo int no que esses também armazenam um valor de 2 bytes. Em vez de guardar números negativos, no entanto, esses apenas armazenam valores positivos, garantindo um intervalo útil de 0 a 65,535 ((2^16) - 1).

O Due e outras placas ARM armazenam um unsigned int em 4 bytes (32 bits), de 0 a 4,294,967,295 (2^32 - 1).

A diferença entre unsigned ints e ints (com sinal), está na forma como o bit mais significativo, as vezes chamado de o bit "de sinal", é interpretado. No tipo int do Arduino (que possui sinal), se o bit mais significativo é "1", o número é interpretado como um número negativo, e os outros 15 bits são interpretados com (complemento de 2).

Sintaxe

unsigned int var = val;

Parâmetros

  • var: nome da variável
  • val: valor a ser atribuído à variável

Código de Exemplo

O trecho de código abaixo cria uma variável unsigned int chamada ledPin e a atribui o valor 13.

unsigned int ledPin = 13;

※ Notas e Advertências:

Quando variáveis unsigned tem sua capacidade máxima excedida, elas "estouram" e voltam para 0, e também o contrário. Exemplo:

unsigned int x; x = 0; x = x - 1; // x agora contém 65535 x = x + 1; // x agora contém 0

A matemática com variávies unsigned pode produzir resultados inesperados, mesmo se a variável unsigned nunca estourar.

O microcontrolador aplica as seguintes regras:

O cálculo é feito de acordo com a variável de destino. Exemplo, se a variável destino possui sinal, ele irá realizar o cálculo levando em conta o sinal, mesmo que ambas as variáveis de entrada sejam unsigned.

No entanto, em um cálculo que requer um resultado intermediário, o escopo da variável intermediária não é especificado pelo código. Nesse caso, o micro irá usar matemática sem sinal para o resultado intermediário, porque ambas as entradas são unsigned!

unsigned int x = 5; unsigned int y = 10; int resultado; resultado = x - y; // 5 - 10 = -5, como esperado resultado = (x - y) / 2; // 5 - 10 com matemática unsigned é 65530! 65530/2 = 32765 // solução: usar variáveis com sinal, ou fazer o cálculo passo a passo. resultado = x - y; // 5 - 10 = -5, como esperado resultado = resultado / 2; // -5/2 = -2 (matemática inteira, casas decimais não são consideradas)

Então porque usar variáveis sem sinal?

  • Quando o comportamento de estouro é desejado, ex. contadores
  • A variável com sinal é muito pequena, e se quer evitar a perda de memória e performance de long/float.

Ver Também

Linguagem : Constantes Inteiras

Please note: These are affiliate links. If you buy the components through these links, We may get a commission at no extra cost to you. We appreciate it.