Ir ao conteúdo

Ajuda com deslocamento bit a bit


M90

Posts recomendados

Postado

boas pessoal

sou iniciante na programação e estou com algumas dificuldades

queria fazer um deslocamento do nº 13, 2vezes para a esquerda mas nao estou conseguindo

o meu programa esta dando

13<<2=32

e tem de dar pois assim é que esta correcto mas nao estou conseguindo

13<<2=4

#include <stdio.h>

#include<stdlib.h>

main()

{

/*int x3;

int x1,x2;

*/

int numero, deslocamento, resultado;

printf("\n\nNumero pretendido a deslocar =");

scanf("%d",&numero);

printf("\n\nNumero de bits a deslocar =");

scanf("%d",&deslocamento);

resultado=numero<<deslocamento;

printf("%02d<<%02d = %02d\n",numero,deslocamento,resultado);

printf("\n\nvalor deslocado sera: %02d \n\n\n\n",resultado);

system("pause");

}

alguem poderia ajudar por favor?

Postado

Fiz uns testes e tava vendo que o problema é o tamanho do int. Considerando int8:

O programa pega 00001101 (tá justificado a direita, então tem os 0's na frente)

E ao deslocar faz: 00110100

O int não tem apenas o tamanho exato do valor, ele tem o tamanho definido dele (8/16/32) e com leading zeros.

O jeito que eu pensei, voce tem que descobrir o tamanho do numero em bits (mas só os ocupados, então o sizeof não vai te ajudar muito). Pra isso voce tem que primeiro verificar qual o bit mais significativo, deslocando o resultado até ter um valor 1 na frente, aí faz uma lookup table (conjunto de ifs para todas as condições)

Se o tamanho em bits for 1, voce pega o resultado do deslocamento e faz um AND bit a bit com o valor 1 (0000000000000001)

Se o tamanho em bits for 2, voce pega o resultado do deslocamento e faz um AND bit a bit com o valor 3 (0000000000000011)

Se o tamanho em bits for 3, voce pega o resultado do deslocamento e faz um AND bit a bit com o valor 7 (0000000000000111)

E assim por diante.

Postado

Eu estive pensando e fiz desta forma

#include <stdio.h>

#include<stdlib.h>

main()

{

int x1,x2, x3;

printf("\n\nNumero pretendido a deslocar= ");

scanf("%d",&x1);

printf("\n\nNumero de bits a deslocar= ");

scanf("%d",&x2);

x3= (x1<<1) % (x2<<1);

printf("%2d << %2d =%2d\n",x1,x2,x3);

printf("\n\nvalor deslocado sera:%2d \n\n\n\n",x3);

system("pause");

}

o problema é que o 13<<2=4

mas por exemplo 6<<2=0 e devia dar 8 mas n esta dando

o que pode ser???

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!