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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas valor Variable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas valor Variable  (Leído 1,624 veces)
neg1414

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Problemas valor Variable
« en: 2 Enero 2018, 10:33 am »

Buenas..

En primer Lugar feliz Año a Todos...

Estoy adaptando un codigo de c# a c++ y me a surgido un problema con el valor de una variable al ejecutar una funcion recursiva..

la funcion es la siguiente

Código:

main
{
...........
 recursiva(2513169434916L, 0, 1, 14, 2513169509823);
}


void recursiva(long long Z, byte P, byte H, byte X, long long K)
{

 long long int num = 7L << (int)(3 * P);

 for (byte b = P; b < X; b += 1)
  {
   for (short num2 = 1; num2 >= 0; num2 -= 1)
    {
    long long  num3 = (Z & ~num) | 1L << (int)((short)(b * 3) + num2);
    if (P < H)
      {
         recursiva(num3, b + 1, H + 1, X, K);
      }
    }
   num <<= 3;
  }
}


La variable que me da problemas es num3

sus valorese deberian ser sucesivamente

2513169509823
2513169434914
2513169434898
2513169434770
2513169433746
2513169425554
2513169360018
2513168835730
2513164641426
2513131086994
2512862651538
hasta aqui bien pero el siguiente en vez de
2510715167890

da -1840700270

En el codigo en c# original el tipo de variable num3 es long (64bites) yo lo he adaptado a long long e incluso a long long int pero sigue igual

Alguna Idea Gracias...


En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Problemas valor Variable
« Respuesta #1 en: 2 Enero 2018, 11:03 am »

Esta dificil seguir que es lo que esta haciendo tu codigo. No es claro que controla cada variable, los nombres de ellas solo tienen sentido para quien escribio ese codigo.

Que diferencia hace que las variables que usas sean especificadas como unsigned?

Sugeriria definir las variables como unsigned si es que el bit de signo no te interesa conservarlo.


En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
neg1414

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Problemas valor Variable
« Respuesta #2 en: 2 Enero 2018, 12:09 pm »

Buenas..

He reducido el ambito del problema acotando el procedimiento recursivo..

Código:
void TPr::recursiva(long long Z, byte P, byte H, byte X, long long K)
{

 long long int num = 7L << (int)(3 * P);

 for (byte b = P; b < X; b += 1)
  {
         recursiva(Z, b + 1, H + 1, X, K);
  }
}

el Valor de la variable num deberia ser

7
56
448
3584
28672
229376
1835008
14680064
117440512
939524096
hasta aqui bien
pero en vez de 7516192768 da

-1073741824

Mejor asi? Gracias
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.492



Ver Perfil
Re: Problemas valor Variable
« Respuesta #3 en: 2 Enero 2018, 13:05 pm »

La implementación de los números depende del compilador, es decir, un montón lo puede tratar como un int, igual que long long. Lo único que te asegura el estándar, si no recuerdo mal es que un long nunca será más pequeño que un int, igual que un short nunca será más grande que un int. Y un int, de normal, tendrá el mismo tamaño que la palabra del procesador, aunque ahora un compilador C sobre 64 bits trabaja con int de 32.

Hay librerías, tanto de terceros como del sistema operativo, o según qué compiladores también las llevan, que definen tipos de datos que aseguran que son del tamaño buscado, para saltarse esas licencias que se dan los diseñadores de compiladores.
En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
neg1414

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Problemas valor Variable
« Respuesta #4 en: 2 Enero 2018, 13:49 pm »

Gracias por contestarme...

Me holia que el problema debia de ser relacionado con el tamalño del daato, de hecho reduci el codico hasta
Código:
for(int x=0;x<12;x++)
  {
     long long int num = 7L << (int)(3 * x);
  }

 y me da el mismo problema..

Trabajo con builder c++ conoces aguna libreria que solucione mi problema??
Gracias
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.492



Ver Perfil
Re: Problemas valor Variable
« Respuesta #5 en: 2 Enero 2018, 16:27 pm »

Ya que estás tras C++ puedes usar la librería bigint,en sourceforge hay unas cuantas, o buscas int64 para tu S.O., hay muchas páginas que indican cómo usar eso.
En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Problemas valor Variable
« Respuesta #6 en: 3 Enero 2018, 04:09 am »

¡Buenas!

Para curarte en salud, si vas a trabajar con enteros sin signo, declara los datos como unsigned, sino, en cuanto el bit más significativo pase de ser cero a ser uno estarás transformando el número en uno negativo.
« Última modificación: 3 Enero 2018, 04:14 am por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines