Título: [Solucionado][Consulta / Duda] Desplazando más de 31 bits Publicado por: BloodSharp en 14 Marzo 2021, 06:51 am Primero antes que nada buenos días/noches.
Bueno digamos que estaba muy aburrido :xD y me puse a generar un código que sume en Complemento a 2: Código
Si lo pruebo con ambos números enteros pequeños 4 y 7 el código funciona perfectamente, ahora el problema es cuando pongo un número entero gigante o negativo el código no funciona: (https://i.imgur.com/5v8vGjB.png) Dije quizás sea un error de GCC voy a probar otro compilador diferente y de diferente lenguaje como Pascal: (No puedo subir el código en Pascal porque el foro no lo permite) (https://i.imgur.com/ewf20Wu.png) (Solución temporal o hasta que alguien lo verifique lo subo en imagenes) (https://i.imgur.com/BOaoC5c.png) (https://i.imgur.com/6rUKm2r.png) (https://i.imgur.com/jBaAvlX.png) Lo cuál ocurre lo mismo: (https://i.imgur.com/f4coZDo.png) Pero lo que me inquietó es que pasado los 31 bits de desplazamiento no parece realizar operaciones al menos de manera correcta: (https://i.imgur.com/FT62iKo.png) Mi duda es hay alguna manera de llegar a desplazar más bits correctamente, o yo tengo algún error y no me dí cuenta todavía del error o ¿También es una limitación de los procesadores esto? B# Título: Re: [Consulta / Duda] Desplazando más de 31 bits Publicado por: Eternal Idol en 14 Marzo 2021, 10:30 am Desplazar no es un problema:
Código
https://en.wikipedia.org/wiki/Two%27s_complement#Addition Título: Re: [Consulta / Duda] Desplazando más de 31 bits Publicado por: MAFUS en 14 Marzo 2021, 12:20 pm Me gustó tu ejercicio. Aquí una solución mía:
Código
Título: Re: [Consulta / Duda] Desplazando más de 31 bits Publicado por: BloodSharp en 14 Marzo 2021, 16:47 pm Gracias a ambos por responder, he cambiado el código para realizar el mismo problema con operaciones de 32 bits y si funciona perfectamente:
Código
(https://i.imgur.com/oRQhcdJ.png) Me doy por vencido :xD espero no necesitar números con 64 bits en mis proyectos reales... B# Título: Re: [Consulta / Duda] Desplazando más de 31 bits Publicado por: RayR en 14 Marzo 2021, 20:04 pm El problema con 64 bits pasa porque esta expresión:
Código
tiene el tipo del operando izquierdo (la constante literal 1), o sea int. En otras palabras, en realidad estás efectuando el desplazamiento sobre un valor de 32 bits. Si conviertes ese 1 a int64_t, debería funcionar. Título: Re: [Solucionado][Consulta / Duda] Desplazando más de 31 bits Publicado por: BloodSharp en 14 Marzo 2021, 23:21 pm El problema con 64 bits pasa porque esta expresión: Código
tiene el tipo del operando izquierdo (la constante literal 1), o sea int. En otras palabras, en realidad estás efectuando el desplazamiento sobre un valor de 32 bits. Si conviertes ese 1 a int64_t, debería funcionar. Si era eso gracias, tema solucionado. ;-) ;-) B# |