elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con el uso de corrimientos de bits (bitshift)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con el uso de corrimientos de bits (bitshift)  (Leído 5,709 veces)
icoheed

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Problema con el uso de corrimientos de bits (bitshift)
« en: 5 Mayo 2012, 08:23 am »

Hola a todos, estamos desarrollando un motor de ajedrez en el cual para hacer los movimientos de las piezas usamos corrimientos de bits o bitshifts. El problema es que cuando se hace el computo de 1<<38, este arroja como resultado 0x40 debiendo ser 0x4000000000. El segmento de código es el siguiente:


Código:
int power=38;
     unsigned long auxtab=0;
   
   auxtab=(1<<power);
   printf("Prueba: %x",auxtab);
   

Ojalá me puedan ayudar un poco. Muchas gracias.


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema con el uso de corrimientos de bits (bitshift)
« Respuesta #1 en: 5 Mayo 2012, 10:34 am »

sizeof(unsigned long) es 4. ¿No? El valor maximo que podes asignarle es 0xFFFFFFFF asi que si queres ese valor que pusiste tenes que usar una variable de mayor tamaño, fijate en tu compilador.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: Problema con el uso de corrimientos de bits (bitshift)
« Respuesta #2 en: 5 Mayo 2012, 20:11 pm »

http://msdn.microsoft.com/en-us/library/s3f49ktz(v=vs.80).aspx

si se usa unsigned long long que le sigue a unsigned long


En línea

icoheed

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Problema con el uso de corrimientos de bits (bitshift)
« Respuesta #3 en: 10 Mayo 2012, 01:15 am »

Ya chequé y el tamaño de unsigned long me lo da como 8.

Alguna sugeencia?????
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Problema con el uso de corrimientos de bits (bitshift)
« Respuesta #4 en: 10 Mayo 2012, 03:55 am »

entonces seguramente tu maquina es de x64, si necesitas el 0x40000000 entonces el power debería sér 30d
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema con el uso de corrimientos de bits (bitshift)
« Respuesta #5 en: 10 Mayo 2012, 10:17 am »

Para verlo:
Código:
printf("Prueba: %I64x", auxtab);

Y lo podes calcular asi:
Código:
unsigned long long auxtab = 1;
auxtab <<= power;

O asi:
Código:
auxtab=((unsigned long long)1 << power);

PD. Puede que no necesites hacer el casting ni cambiar el tipo segun lo que comentas del tamaño de la variable, con lo del printf estaria solucionado.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
icoheed

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Problema con el uso de corrimientos de bits (bitshift)
« Respuesta #6 en: 14 Mayo 2012, 00:49 am »

Para verlo:
Código:
printf("Prueba: %I64x", auxtab);

Y lo podes calcular asi:
Código:
unsigned long long auxtab = 1;
auxtab <<= power;

O asi:
Código:
auxtab=((unsigned long long)1 << power);

PD. Puede que no necesites hacer el casting ni cambiar el tipo segun lo que comentas del tamaño de la variable, con lo del printf estaria solucionado.

El problema no es la impresión en pantalla del número hexadecimal, el problema radica en que el cálculo se está haciendo mal. Pasamos ese número hexadecimal a una función que imprime un tablero gráfico y el número está mal.

Ya hemos probado diferentes posibles soluciones pero no obtenemos que haga el cálculo correctamente, nos corta a 32 bits siendo que usamos el SO de 64 bits y además el compilador es gcc de 64 bits.

¿Alguna idea?
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema con el uso de corrimientos de bits (bitshift)
« Respuesta #7 en: 14 Mayo 2012, 09:50 am »

Bien, pero nunca lo iban a ver como corresponde con %X. Proba de calcularlo como motsre arriba y si sigue sin funcionar depura el programa para ver exactamente que esta haciendo.


PD. Vos estabas usando 1 y ese literal es un int, ponelo en una variable de 64 bits o hacele un casting al empujar.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
icoheed

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Problema con el uso de corrimientos de bits (bitshift)
« Respuesta #8 en: 22 Mayo 2012, 02:04 am »

Muchas gracias, es cierto, el problema es que estaba corriendo una variable de 32 bits por lo cual la cortaba en 32 bits. Ahora he usado el mismo auxtab igualado a 1 el cual es unsigned long en 64 bits.

El problema ha sido solucionado, pueden dar el tema por SOLUCIONADO. Muchas gracias a todos por sus respuestas.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problema con el uso de corrimientos de bits (bitshift)
« Respuesta #9 en: 22 Mayo 2012, 10:06 am »

De nadas  ::)
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con un comparador de 16 bits y otro d 4 bits en complemento a2
Electrónica
basileia 0 3,881 Último mensaje 22 Abril 2006, 18:38 pm
por basileia
Problema con windows 7 64 bits « 1 2 »
Windows
NikNitro! 14 9,962 Último mensaje 21 Enero 2011, 13:35 pm
por Novlucker
Las versiones 64 bits de Windows 7, ista y XP son más seguras que las de 32 bits
Noticias
wolfbcn 5 5,849 Último mensaje 6 Julio 2011, 07:39 am
por SuperDraco
¿Se puede instalar Windows 7 64 bits sobre Win-7 32 bits?
Windows
nony1946 8 55,568 Último mensaje 4 Junio 2011, 13:52 pm
por Randomize
Ayuda division y multiplicación con corrimientos
ASM
fuct 1 3,177 Último mensaje 20 Octubre 2014, 21:54 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines