Ir para conteúdo

Arquivado

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

Pulse

Unsigned int

Recommended Posts

Estou com um problema nesse código. Quero que ele imprima o valor sem sinal negativo mas tá imprimindo um lixo de memória. Qual o erro?

#include <stdio.h>

int main ()
{
    int a, b, c;

    scanf("%d", &a);
    scanf("%d", &b);

    c = a - b;

    printf("%u", (unsigned int)c);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código funciona como esperado quando a é positivo:

 

 


beraldo@piemonte:tmp$ ./a.out
2
1
1

beraldo@piemonte:tmp$ ./a.out
3
2
1

beraldo@piemonte:tmp$ ./a.out
10
5

5

 

Porém quando a é negativo:

 


beraldo@piemonte:tmp$ ./a.out
1
2
4294967295

 

Isso acontece devido à representação de números negativos em base binário. Não há nada de errado no código

 

Você queria que "1 - 2" exibisse "1"? Se for isso, você precisa pegar o valor absoluto. Existe a função abs() da lib math. Também é possível criar a sua próprio, multiplicando o número por -1 se ele for negativo :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então o modificador unsigned só serve para aumentar a capacidade de armazenamento de números positivos? Eu achei que a gente poderia usar ela quando tivéssemos algum número negativo e quiséssemos usar o módulo dele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O unsigned não aumenta espaço. A quantidade de bits é a mesma. A diferença é que o bit mais significativo é usado para identificar o sinal, no caso do int. No caso do unsigned int, o bit mais significativo faz parte do número.

 

Ou seja, é possível representar números maiores, mas a quantidade de bits é a mesma.

 

Estude sobre representação binária de números negativos, que entenderá melhor. Procure por "complemento de 1" e "complemento de 2"

 

http://producao.virtual.ufpb.br/books/camyle/introducao-a-computacao-livro/livro/livro.chunked/ch03s04.html

http://pt.wikipedia.org/wiki/Representa%C3%A7%C3%A3o_de_n%C3%BAmeros_com_sinal

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.