Pulse 0 Denunciar post Postado Abril 13, 2015 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
Beraldo 864 Denunciar post Postado Abril 15, 2015 O código funciona como esperado quando a é positivo: beraldo@piemonte:tmp$ ./a.out211 beraldo@piemonte:tmp$ ./a.out321 beraldo@piemonte:tmp$ ./a.out105 5 Porém quando a é negativo: beraldo@piemonte:tmp$ ./a.out124294967295 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
Pulse 0 Denunciar post Postado Abril 15, 2015 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
Beraldo 864 Denunciar post Postado Abril 15, 2015 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