[ Foro de C++ ]

c++ problema variable

02-Jan-2018 10:46
Invitado (neg1414)
3 Respuestas

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);
}


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...


02-Jan-2018 12:14
Invitado (neg1414)

Buenas..

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


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


24-Jan-2018 23:12
Nacho Cabanes (+84)

Los nombres de variables tan crípticos no ayudan a seguir el programa para deducir el problema. Aun así, claramente es un desbordamiento. Quizá afecte ese "7L", que es un dato "long", en vez de un "long long".


11-Feb-2018 23:23
Fake Name

<script>alert("Estoy teniendo problemas similares xD")</script>






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)