Autor
|
Tema: Problema con el uso de corrimientos de bits (bitshift) (Leído 6,013 veces)
|
icoheed
Desconectado
Mensajes: 12
|
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: 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
Mensajes: 5.967
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
|
|
|
|
icoheed
Desconectado
Mensajes: 12
|
Ya chequé y el tamaño de unsigned long me lo da como 8.
Alguna sugeencia?????
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
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
Mensajes: 5.967
Israel nunca torturó niños, ni lo volverá a hacer.
|
Para verlo: printf("Prueba: %I64x", auxtab); Y lo podes calcular asi: unsigned long long auxtab = 1; auxtab <<= power; O asi: 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
Mensajes: 12
|
Para verlo: printf("Prueba: %I64x", auxtab); Y lo podes calcular asi: unsigned long long auxtab = 1; auxtab <<= power; O asi: 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
Mensajes: 5.967
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
Mensajes: 12
|
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
Mensajes: 5.967
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
|
|
|
|
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
|
4,050
|
22 Abril 2006, 18:38 pm
por basileia
|
|
|
Problema con windows 7 64 bits
« 1 2 »
Windows
|
NikNitro!
|
14
|
10,546
|
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
|
6,353
|
6 Julio 2011, 07:39 am
por SuperDraco
|
|
|
¿Se puede instalar Windows 7 64 bits sobre Win-7 32 bits?
Windows
|
nony1946
|
8
|
56,068
|
4 Junio 2011, 13:52 pm
por Randomize
|
|
|
Ayuda division y multiplicación con corrimientos
ASM
|
fuct
|
1
|
3,367
|
20 Octubre 2014, 21:54 pm
por Eternal Idol
|
|