Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rogério Shoiti

[Resolvido] Exibição de valores com printf

Recommended Posts

Pessoal, estou com dúvidas quantos ao número de bits em programação C/C++.

Um exemplo: 16 bits. Na programação C ele varia de -32768 a 32767, segundo o livro "A Bíblia C/C++" diz.

Eu penso assim: Se o sinal de "-" representa 1 bit, então restam 15 bits. Se desenvolvermos esse valor e convertermos para decimal, teremos um valor de 32767 mais um sinal de - para representá-lo como negativo, ou seja, -32767. Então como ele assume o valor de -32768?

Se consideramos -32768 e seguirmos a lógica do bit de sinal, então esse número será igual a 17 bits http://forum.imasters.com.br/public/style_emoticons/default/excl.gif (1 bit de sinal + 16 bits (2^15 até 2^0)

Já a parte positiva tem lógica, pois com valor zero no bit de sinal, assume-se valores positivos, assim restam 15 bits que resultam em 32767.

 

muito obrigado a quem puder me ajudar http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 :lol: http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rogério, tudo bom?

Eu uni os seus dois tópicos, pois as dúvidas são exatamente iguais!

Na próxima vez, espere por uma resposta antes de criar outro tópico! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

(Dev-C++ não é compilador, é IDE... e aproveitando a deixa, não use mais essa velharia! por favor!)

 

Acho que o seu livro deveria ensinar outros conceitos mais importantes primeiro...

void main(void);
a função main retorna INT.

Como você declara a função como "void" e retorna 0????

 

system("pause");
??? o que é isso ???

O seu livro ensina isso também?

http://forum.imasters.com.br/index.php?/topic/336835-tutorial-systempause-e-fflushstdin/

 

você ja teve a curiosidade de usar a função "sizeof"???

É realmente útil nisso!

Quem disse que um int tem 2 bytes?

Na maioria das plataformas, hj em dia, inteiros tem 4 bytes. A única forma de obter a confirmação desse valro é chamar "sizeof(int);".

 

O sinal de menos não representa 1 bit. Em um número, que não seja "unsigned", se o bit mais significativo for 1 o número é negativo.

 

Não se preocupe com o número de bits dos tipos de dados, isso não é nem um pouco importante na fase que você está!

Cara, se o teu livro te ensina a declarar a função "main" daquela forma, e a usar system("pause") eu te aconselho a mudar de livro... rápido!

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por responder VictorCacciari!

 

O livro que utilizo é "Programando em C/C++ - A Bíblia" ed. 1999.

Ele ensina que o valor de main é assim mesmo: void main (void).

Eu estudando por conta própria... então eu leio um pouco o livro, vejo se entendi e então executo os exemplos citados.

Quanto ao Dev-C/C++ eu pesquisei na Internet sobre compiladores e o que o pessoal falava mais era esse aí. Antes ele do que um tal de Turbo C++ Lite :blink:

Agora em relação aos tópicos, me desculpe. Para mim, eram problemas distintos. Em um eu estou com dúvidas quanto aos bits e outro em relação à função printf.

O system("pause") foi a maneira que encontrei, através de pesquisa na internet, de "fixar" a tela de execução, pois toda vez que eu compilava e executava algum programa a tela aparecia e em questão de 1 segundo fechava. Ou seja, executava e fechava! Não dava nem pra ver o resultado.

 

Mto obrigado http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rogério,

 

De nada! =D

Sobre os tópicos, nem esquenta!

 

Cara, se o livro te ensina "void main(void)" mude de livro.

A função principal do programa (o nome não precisa ser "main", desde que seja corretamente especificado na linkagem) deve obrigatoriamente retornar um inteiro.

 

você deu uma olhada no tópico que eu te mandei?

Eu explico com detalhes o porque de não utilizar "system("pause")".

 

Sobre as IDE's, desaconselho totalmente!

Vá na internet, baixe um compilador (aconselho ir com o MinGW) e um bom editor de texto, notepad++ é uma boa escolha.

Escreva seus programas na mão, e compile na mão também!

Saber trabalhar com o compilador é de extrema importância, e você só aprende se compilar as coisas na mão.

IDE's foram feitas para aumentar a produtividade de programadores mais experientes.

 

Agora em relação aos tópicos, me desculpe. Para mim, eram problemas distintos. Em um eu estou com dúvidas quanto aos bits e outro em relação à função printf.

Mais ou menos... a sua dúvida a respeito da arquitetura e representação de números na memória levou a dúvida com o printf. xD

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá VictorCacciari!

Eu baixei o programa Code::Blocks, conforme estava no link indicado. Ele é um IDE, não é?

Esse MinGW tem uma interface ("aparência") diferente da IDE citada acima? Nesse IDE já existe um editor de texto. Para usar esse MinGW terei que utilzar um editor de texto a parte?

Vi seu tópico sim... o motivo por utilizar a função system("pause") realmente é aquilo que você escreveu... mas eu não entendi o porque utilizar a função scanf no lugar de system("pause").

No mesmo tópico eu li e fiquei em dúvida:

int main()
{
        char cont='s';
        while(cont == 's');
        {                
                printf("Deseja continuar? (s/n): ");
                scanf("%c%*c", &cont);
//note a mudança aqui!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
        }        
        return 0;
}
Se a string da função printf pede para digitar "s" ou "n", porque temos que digitar 2 caracteres em scanf, sendo que 1 deles será ignorado?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rogério, você pode e deve perguntar isso la no tópico, para mantermos a organização.

Inclusive, eu explico isso!

Mas...

quando apertamos "enter", o caractere '\n' (quebra de linha) é enviado para a string.

 

MinGW é apenas o compilador!! Não tem interface nenhuma!

Você vai escrever o código, salvar em um arquivo, abrir o prompt de comando e digitar os comandos para a compilação manualmente.

Você está confundindo alguns conceitos bem básicos, que podem te complicar a vida mais à frente.

IDE significa "Integrated Development Envoirement", em português, "Ambiente de Desenvolvimento Integrado".

Ele possui todas as ferramentas para facilitar o desenvolvimento de programas.

Normalmente, uma IDE possui:

  • Editor de Texto
  • Realce de sintaxe
  • Completador de código
  • Explorador de simbolos
  • Integração com compiladores e debuggers

Eu estou falando para você usar essas ferramentas de forma separada, para aprender a trabalhar com elas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pelo auxílio VictorCacciari.

Vou seguir suas dicas, asssim como baixar o compilador MinGW.

E mais uma vez me desculpe por postar o exemplo de outro tópico neste aqui :wacko:

Valeu e até +

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.