• Domingo 22 de Diciembre de 2024, 03:01

Autor Tema:  Re: Desplazamiento de mascara de permisos  (Leído 1407 veces)

kain

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Desplazamiento de mascara de permisos
« en: Sábado 22 de Febrero de 2003, 20:19 »
0
Mi problema es el siguiente... Desea hacer un desplazamiento aritmetico a izquierdas ya que tengo una mascara de bits de permisos. La mascara de bits la declaro como un signed int y lo que deseo hacer es desplazar el bit correspondiente de la mascara para que se quede a 1 y que por lo tanto como estan representados  y complemento a dos pues sea negativo el numero...
bueno pues cuando intento hacer esto como el rango de representacion de un signed int es de -32768 a 32768 ,realizo 16 desplazamientos suponiendo de que el bit este totalmente a la derecha... pues nada... el numero sigue siendo positivo. Tengo que hacer 28 desplazamientos para que cambie de signo y se me sube el numero en un par de milloncejos...

Mi pregunta es esto normal? Como se puede hacer para que el entero al desplazarlo quede en el rango anterior ???

Salu2

gmantil

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
Re: Desplazamiento de mascara de permisos
« Respuesta #1 en: Lunes 24 de Febrero de 2003, 13:58 »
0
He hecho una prueba con el programita que adjunto y a mi me funciona. Pruebelo en su compilador. En el movimiento 15 el número se convierte en negativo.

# include <stdio.h>

main()
{
   int i,num=1;

   for(i=0; i<15; i++)
   {
      printf("n %d ",num<<=1);
   }
}

Suerte,
gmantil

kain

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Desplazamiento de mascara de permisos
« Respuesta #2 en: Miércoles 26 de Febrero de 2003, 21:37 »
0
Intenta hacer 30 desplazamientos en vez de 15 desplazamientos... a mi no me cambia de un valor positivo a negativo que es lo que busco... tal vez sea del compilador de linux... pero no estoy seguro.

Salu2

gmantil

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
Desplazamiento de mascara de permisos
« Respuesta #3 en: Jueves 27 de Febrero de 2003, 13:47 »
0
Verifica que efectivamente tu palabra es de 16 bit. Puede ser que tu palabra sea de 32 bit lo cual hará que el rango no sea entre -32768 y 32768. Me pones a pensar en esto cuando me dices que con tu desplazamineto en 28 sube algunos "milloncejos". Asigna a tu variable 0xFFFF e imprime la variable. No he probado lo que te digo en Linux pero me parece que la palabra allí es de 32 bits.

Seguimos en contacto, si descubro algo te lo haré saber.

Suerte,

gmantil