Pessoal, estou dando início aos estudos de C/C++ e lendo o exemplo do livro sobre como exibir valores do tipo unsigned int e long int através da função printf, tentei executá-los conforme indicava. Utilizei o compliador Dev-C++. Ele compilou, mas quando a janela do executável abriu, o resultado estava diferente do livro e também não tinha lógica. O valor que surgiu na string "Exibe valor como int" ficou igual a string "Exibe valor como unsigned" no valor de 42000 include <stdio.h>
void main (void)
{
unsigned int valor = 42000;
printf ("Exibe valor como unsigned = %u\n", valor);
printf ("Exibe valor como int = %d\n", valor);
system ("pause");
return (0);
}
No livro diz que o valor exibido utilizando %d, a função printf entenderia como se fosse um valor int, seria -23536 e o valor de %u seria 42000.
Também não entendi como esse valor -23536 surgiu.
E outra: O valor máximo aceito pela variável unsigned int deve ser igual a 16 bits (65535). Porém, eu posso colocar um valor bem maior que isso, tipo 100000 que o número inteiro não estoura!! Se eu adiciono a variável short junto a unsigned int aí sim o valor de %u vai até 65535 e se extrapola, tipo 65536 ele vira 1. Mas até o valor 65535, %d continua igual ao valor de %u.
O mesmo problema ocorre em:
#include <stdio.h>
void main (void)
{
long int valor = 1000000;
printf ("Exibe valor como long = %ld\n", valor);
printf ("Exibe valor como int = %d\n", valor);
system ("pause");
return (0);
} O valor de %d deveria ser 16960, mas ele aparece como 1000000 Muito obrigado aos que me ajudarem