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);
}
|
HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO |