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
Pergunta
Rogério Shoiti
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
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:O valor de %d deveria ser 16960, mas ele aparece como 1000000
Muito obrigado aos que me ajudarem
Editado por Rogério ShoitiLink para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.