IvanR 0 Denunciar post Postado Novembro 25, 2008 um exemplo: sendo que os valores das variaveis numero sao preenchidas pelo usuario, não está ai o problema int numero; int numero 2; double vetor[1]; vetor[1] = (((numero * numero2) << 32) >> 32); vetor[0] = ((numero * numero2) >> 32); como posso tirar este warning ? Ou oq está acontecendo? Abraços! Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 25, 2008 O que está acontecendo é que você está tentando deslocar mais do que o tamanho em bits do tipo. Teu pc é 32 bits. Então você só pode deslocar até 31 bits. Compartilhar este post Link para o post Compartilhar em outros sites
IvanR 0 Denunciar post Postado Novembro 25, 2008 Mas se eu puder então não tem problema? Mesmo com essse warning ? OBS: apaguem os outros tópicos, a conexão da empresa aki é uma porcaria e acabou postando varias vezes Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 25, 2008 Por quê você quer deslocar 32 posições? 32 mod 32 = 0. Dá na mesma de um << 0. #include <stdio.h> int main() { int N1=2; printf("%d\n",N1<<32); } Saída: 2 http://answers.google.com/answers/threadview?id=388350 A barrel shifter is a combinational logic circuit with n data inputs,n data outputs, and a set of control inputs that specify how to shift the data between input and output. A barrel shifter that is part of a microprocessor CPU can typically specify the direction of shift (left or right), the type of shift (circular, arithmetic, or logical), and the amount of shift (typically 1 to n-1 bits, but sometimes 1 to n bits). Warnings dizem que você pode fazer, mas corre o risco de ter dados errados por ir contra algum tipo de implementação (hardware ou software). Se o hardware de deslocamento for implementado com multiplexadores, p/ uma entrada de 4 bits você tem 2 entradas que controlam o comportamento do circuito. Um deslocamento de 5 bits precisa de 3 bits p/ ser representado, o que não vai caber. Compartilhar este post Link para o post Compartilhar em outros sites
IvanR 0 Denunciar post Postado Novembro 26, 2008 Então eu estou com um probleminha, estou implementando um mips e estou precisando implementar os registradores HI e LO, pesquisando achei que eles seriam desta maneira como propus acima, por isso tentei multiplicar inteiros e anexar em um double, mas também não deu certo. preciso multiplicar 2 32bits e colocar em 64 bits, ou seja, em 2 registradores de 32 bits o resultado Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 26, 2008 Tá.Eu estudei só 4 versões do algoritmo de multiplicação. No primeiro você imita o algoritmo comum: são 32 repetições; o multiplicando é colocado num registrador de 64 bits; o multiplicador é um de 32bits e o produto tem 64 bits,inicializado com 0: 1. Se o bit 0 do multiplicador for 0, vá p/ o passo 2 1a. Se o bit 0 do multiplicador for 1,somar o multiplicando ao registrador do produto 2. Deslocar o multiplicando 1 bit à esquerda 3. Deslocar o multiplicador 1 bit à direita 4. 32a repetição? Sim: fim. Não:voltar ao passo 1 O segundo algoritmo divide o registrador de produto em duas partes; o multiplicando e o multiplicador são de 32 bits e a ULA é de 32 bits. 1.Se o bit 0 do multiplicador for 0, vá para o passo 2 1a. Se o bit 0 do multplicador for 1, adicionar o multiplicando à metade esquerda (os 32 bits mais significativos) do produto e colocar o resultado na metade esquerda do registrador do produto 2. deslocar o produto 1 bit à direita 3. deslocar o multiplicador 1 bit à direita 4. 32a repetição? Sim: Fim. Não: voltar ao passo 1 O terceiro aproveita os 32 bits menos significativos do Produto e coloca o multiplicador nesse espaço. O 4o era o algoritmo de booth,que usa o registrador de produto inicializado com o multiplicando: 1. Se o bit 0 do produto for 0, va para o passo 2 1a. Se o bit 0 do produto for 1, somar o multiplicando à metade esquerda do produto e colocar o resultado na metade esquerda 2. deeslocar o produto em 1 bit à direita 3. 32a repeticao? Sim: Fim. Não: voltar ao passo 1 Compartilhar este post Link para o post Compartilhar em outros sites
IvanR 0 Denunciar post Postado Novembro 27, 2008 Tentei fazer mas naum consegui, o maximo que cheguei foi aki int main() { int multiplicando = 3; int multiplicador = 2; int j; int produto = 0; int p = 0; int h; for(h = 2; h > -1; h--) { j = multiplicando >> h; if(j == 0){ produto >> p; p++; } else{ p = 0; j = multiplicador << p; produto += j; } } printf("%d\n",produto); return 0; } tb to com uma extrema dor de cabeça Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 27, 2008 #include <stdio.h> struct S1 { long long multiplicando; long multiplicador; long long produto; }; long long mult1(int multiplicador, int multiplicando) { struct S1 REGS; REGS.produto = 0; REGS.multiplicando = (long long)multiplicando; REGS.multiplicador = (long)multiplicador; int i; for(i=0;i<32;i++) { if (REGS.multiplicador & 0x1 == 1) REGS.produto+=REGS.multiplicando; REGS.multiplicando = REGS.multiplicando<<1; REGS.multiplicador = REGS.multiplicador>>1; } return REGS.produto; } int main() { int multiplicando, multiplicador; scanf("%d %d",&multiplicando,&multiplicador); printf("Resultado:%lld",mult1(multiplicador,multiplicando)); } http://64.233.169.132/search?q=cache:Xyahx...lient=firefox-a Compartilhar este post Link para o post Compartilhar em outros sites
IvanR 0 Denunciar post Postado Novembro 27, 2008 Muito obrigado Isis, mas só tenho 1 duvida: é necessario que um seja long e o outro long long (nem sabia q existia long long hehe) Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 27, 2008 long long é inteiro de 64 bits. Veja o algoritmo. Compartilhar este post Link para o post Compartilhar em outros sites
IvanR 0 Denunciar post Postado Dezembro 2, 2008 Obrigado Isis! Sua ajuda foi de grande valia! Podem trancar o tópico Compartilhar este post Link para o post Compartilhar em outros sites