Jabutti Postado Setembro 1, 2010 Denunciar Share Postado Setembro 1, 2010 Olá pessoal.Se eu fizer a declaraçãounsigned int V;atribuir o valor a variável VV = UINT_MAX;e fazer a operaçãoV = V + 1;o resultado de V será zero. Até aqui tudo beleza.O que eu quero fazer e não sei é possível é: atribuir um valor máximo a variável V diferente de UINT_MAX (por exemplo, 10) e ao fazer a operação:V = 10;V = V+1;ter como resultado V=0.Resumindo, gostaria de modificar o valor de UINT_MAX, ou criar uma variável com seu próprio valor máximo. É possível?Alguém pode me ajudar?Obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Setembro 1, 2010 Denunciar Share Postado Setembro 1, 2010 Por que você não usa o resto da divisão '%'?Por exemplo: V= 10V = (V + 1) % 11Dai V vai ser 0. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jabutti Postado Setembro 1, 2010 Autor Denunciar Share Postado Setembro 1, 2010 Por que você não usa o resto da divisão '%'?Por exemplo: V= 10V = (V + 1) % 11Dai V vai ser 0.Na verdade eu to escrevendo um programa pra minha tese de mestrado e eu tenho uma variável que é acrescida ou decrescida aleatoriamente por valores tb aleatórios. Essa variável tem um valor mínimo, 1, e tem um valor máximo, N. Eu queria, sem usar "if", por ex.Vamos supor que o valor atual de V é: V = N - 1;ao fazer a operação:V = V + 3;eu queria obter o resultado: V = 2;OU se o valor de V é: V = 1;ao fazer a operação?V = V - 1;obter: V = N;Não quero usar "if" porque essas operações são realizadas milhares de vezes e o "if" deixa o programa lento. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Setembro 2, 2010 Denunciar Share Postado Setembro 2, 2010 (editado) O valor máximo é uma potência de dois? Se for tem um jeito prático, testa esse código:#include <stdio.h> typedef struct { unsigned int num : 3; // Valor máximo no caso é (2^3 - 1) } UINT; int main(void) { UINT var; int i; for (i = 0; i < 32; i++) printf("%d", var.num++); printf("\n"); return 0; }Até mais! Editado Setembro 2, 2010 por == Douplus == Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Setembro 2, 2010 Denunciar Share Postado Setembro 2, 2010 Muito legal, essa não sabia. Você poderia explicar o que ':' faz? E também porque só funciona dentro da estrutura e não dentro do main.Abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jabutti Postado Setembro 2, 2010 Autor Denunciar Share Postado Setembro 2, 2010 Era bem isso que eu queria... obrigado Douplus.A única limitação é que o valor máximo da variável tem que ser (2^n -1 , com n =1,2,3,...), mas no meu caso isso não é um problema.Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Setembro 2, 2010 Denunciar Share Postado Setembro 2, 2010 Muito legal, essa não sabia. Você poderia explicar o que ':' faz? E também porque só funciona dentro da estrutura e não dentro do main.Abraço.O : após uma declaração de variável em uma struct informa a quantidade de bits que se deseja para o tamanho da variável. Daí a fórmula 2^N-1, a partir do número de arranjos com repetição possíveis de 2 em grupos de N:Ar(2,5) = 2^N Considerando a representação do zero, o maior valor representável com N bits : 2^N - 1 No código que eu postei usei N = 3, logo o maior valor representável é: (111)b = (7)d = 2^3 - 1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Setembro 2, 2010 Denunciar Share Postado Setembro 2, 2010 Valeu Dopus pela explicação. Tudo entendido. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Jabutti
Olá pessoal.
Se eu fizer a declaração
unsigned int V;
atribuir o valor a variável V
V = UINT_MAX;
e fazer a operação
V = V + 1;
o resultado de V será zero. Até aqui tudo beleza.
O que eu quero fazer e não sei é possível é: atribuir um valor máximo a variável V diferente de UINT_MAX (por exemplo, 10) e ao fazer a operação:
V = 10;
V = V+1;
ter como resultado V=0.
Resumindo, gostaria de modificar o valor de UINT_MAX, ou criar uma variável com seu próprio valor máximo. É possível?
Alguém pode me ajudar?
Obrigado
Link para o comentário
Compartilhar em outros sites
7 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.