Autor
|
Tema: Problemas valor Variable (Leído 2,654 veces)
|
neg1414
Desconectado
Mensajes: 10
|
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 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 num3sus 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 -1840700270En 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
|
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
|
|
|
|
neg1414
Desconectado
Mensajes: 10
|
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
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
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
|
|
|
|
neg1414
Desconectado
Mensajes: 10
|
Gracias por contestarme... Me holia que el problema debia de ser relacionado con el tamalño del daato, de hecho reduci el codico hasta 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
Mensajes: 1.603
|
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
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡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!
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
AYUDA. Una variable con mas de un valor
Programación Visual Basic
|
Poyson
|
5
|
2,155
|
30 Septiembre 2005, 00:16 am
por Slasher-K
|
|
|
Como imprimir el valor de una variable definida en una variable...
Scripting
|
nhaalclkiemr
|
5
|
6,495
|
3 Mayo 2007, 17:58 pm
por sirdarckcat
|
|
|
Pasaje de variable (ya con un valor) por URL
PHP
|
mark182
|
2
|
2,394
|
27 Febrero 2010, 16:46 pm
por mark182
|
|
|
Asignar un valor a una variable(ScriptA)Obtener esa variable (ScriptB)-UNITY c#
Programación General
|
USLO
|
1
|
4,269
|
8 Octubre 2013, 17:51 pm
por Eleкtro
|
|
|
MOVIDO: Asignar un valor a una variable(ScriptA)Obtener esa variable (ScriptB)-UNITY c#
Scripting
|
Eleкtro
|
0
|
2,464
|
8 Octubre 2013, 17:49 pm
por Eleкtro
|
|