• Jueves 2 de Mayo de 2024, 00:32

Autor Tema:  Ayuda D:!!!!!!  (Leído 1390 veces)

GaruRoX

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Ayuda D:!!!!!!
« en: Viernes 20 de Abril de 2007, 21:57 »
0
necesito hacer operaciones de desplazamiento a la izquierda y a la derecha (e intentado de todo pero no me sale 8( ), de 1 bit
en base a este codigo:

Código: Text
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.     int numero_1,numero_2,i,k,opcion,salir=0;
  7.     int num[10];
  8.     int num2[10];
  9.     int numdi[10];
  10.     int numdd[10];
  11.    
  12.     printf("Ingrese numero 1: ");
  13.     scanf("%d",&numero_1);
  14.     printf("Ingrese numero 2: ");
  15.     scanf("%d",&numero_2);
  16.    
  17.     printf("\n");
  18.    
  19.     for(i=0;i<10;++i)
  20.     {
  21.                     if( numero_1%2 != 0)
  22.                     num[i] = 1;
  23.                     else
  24.                     num[i]= 0;
  25.                     numero_1=numero_1/2;
  26.                    
  27.                                    
  28.     }
  29.    
  30.     for(i=0;i<10;++i)
  31.     {
  32.                     if( numero_2%2 != 0)
  33.                     num2[i] = 1;
  34.                     else
  35.                     num2[i]= 0;
  36.                     numero_2=numero_2/2;
  37.                    
  38.                                    
  39.     }
  40.    
  41.    
  42.    
  43.     while(1)
  44. {
  45. printf("\n\n1. Complemento a 2\n");
  46. printf("2. Desplazamiento logico a la izquierda\n");
  47. printf("3. Desplazamiento logico a la Derecha\n");
  48. printf("4. salir\n");
  49. printf("opcion: ");scanf("%i",&opcion);
  50. switch(opcion)
  51. {
  52. case 1:
  53. /*escriba su rutina acá*/
  54. break;
  55. case 2:
  56. /*escriba su rutina aca*/
  57. break;
  58. case 3:
  59. /*escriba su rutina acá*/
  60. break;
  61. default:
  62. salir=1;
  63. }
  64. if(salir ==1)
  65. break;
  66. }
  67.  
  68.  
  69. return 0;
  70.  
  71. }
  72.  
  73.  
---------------------------------------------

esop D:!

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Ayuda D:!!!!!!
« Respuesta #1 en: Viernes 20 de Abril de 2007, 23:57 »
0
:huh:

Pero... tienes algo en contra de usar los operadores <<, >> ???

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Ayuda D:!!!!!!
« Respuesta #2 en: Sábado 21 de Abril de 2007, 00:37 »
0
Se me ocurre que tambien podes multiplicar o dividir por 2^n donde n es la cantidad de bits que quieres desplazar.

Max_D

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
    • http://sitioteca.spaces.live.com/
Re: Ayuda D:!!!!!!
« Respuesta #3 en: Sábado 21 de Abril de 2007, 01:36 »
0

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Ayuda D:!!!!!!
« Respuesta #4 en: Sábado 21 de Abril de 2007, 01:43 »
0
Podeis hacer una pequeñisima rutina con asm y ROR Y ROL....
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Ayuda D:!!!!!!
« Respuesta #5 en: Sábado 21 de Abril de 2007, 20:38 »
0
Pobre hombre... acaba de empezar y ya le estais metiendo en mente el asm??  

Como bien dijo Amilus
Citar
Pero... tienes algo en contra de usar los operadores <<, >> ???

el operador << (bitwise shift left) corre los bits a la izquierda tantas posiciones como indique el valor siguiente:
Para correr 2 bits a la izquierda de la variable "variable_1" sería lo siguiente:
Código: Text
  1.  
  2. int variable_1=5;
  3. variable_1&#60;&#60;=2;//variable_1 vale ahora 20
  4.  
  5.  
El operador << (bitwise shift right) corre los bits de la misma manera pero a la derecha. Siguiendo con el ejemplo anterior:
Código: Text
  1.  
  2. int variable_1=5;
  3. variable_1&#62;&#62;=2;//variable_1 vale ahora 1
  4.  
  5.  

Ojo, por el otro lado entran siempre ceros, no es una instrucción de rotación de bits sino de correr bits, los bits que salen no entran por el otro lado...

Un saludo. :lightsabre:
No hay tonto más molesto que el ingenioso.