Variáveis signed e unsigned

(com e sem sinal)



Quando tratamos dos modificadores de tipos, tivemos oportunidade de observar que em C++ os tipos char e int possuem as variedades signed (com sinal) e unsigned (sem sinal). Tais modificadores permitem-nos filtrar alguns valores que poderão ser desnecessários para determinados tipos de aplicação, como por exemplo os números negativos, ou os valores estendidos da tabela ASCII. Os tipos inteiros (int, short e long) e os char, de regra, podem armazenar valores positivos ou negativos. Todavia se declarados com o modificador de tipos unsigned, ficarão restritos a números iguais ou maiores do que zero.


A tabela abaixo exibe os valores possíveis para os tipos de dados, com ou sem os modificadores de tipo:



Tipo

bytes

possíveis valores

char

1

-128 a 127

unsigned char

1

0 a 255

signed char

1

-128 a 127

int

4

-2147483648 a 2147483647

unsigned int

4

0 a 4294967295

signed int

4

-2147483648 a 2147483647

short int

2

-32768 a 32767

unsigned short int

2

0 a 65535

signed short int

2

-32768 a 32767

long int

4

-2147483648 a 2147483647

signed long int

4

-2147483648 a 2147483647

unsigned long int

4

0 a 4294967295



Observe que o tipo não tem o seu tamanho alterado (número de bytes) em virtude da presença dos modificadores signed ou unsigned. O resultado direto desse fato é que, para um mesmo tipo de dados, o valor máximo que pode ser atribuído a um unsigned é o dobro do maior valor positivo que pode ser atribuído a um signed.


O programa abaixo mostra-nos alguns limites de valores:



void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
for (char ch = -126; ch > -127; ch++) Memo1->Lines->Add(ch);
Memo1 -> Lines -> Add("");

for (signed char Sch = 1 ;Sch > 0; Sch++) Memo1->Lines->Add(Sch);
Memo1 -> Lines -> Add("");

for (unsigned char Uch = -1000; Uch > 0; Uch++) Memo1->Lines->Add(Uch);
Memo1 -> Lines -> Add("");

for (int i = 2147483600; i > 0; i++) Memo1->Lines->Add(i);
Memo1 -> Lines -> Add("");

for (unsigned int ui = 4294967200; ui > 0; ui++) Memo1->Lines->Add(ui);
Memo1 -> Lines -> Add("");

for (signed short int SSi = 32768; SSi < -32000; SSi++) Memo1->Lines->Add(SSi);

}



anterior

índice

próxima


HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO