C/Visual C - Confirmacion para funcion con punteros

 
Vista:

Confirmacion para funcion con punteros

Publicado por Nelek (816 intervenciones) el 11/01/2007 15:45:08
Hola a todos,

si tengo un vector de valores hexadecimales en un fichero

P[8] = { 00, 11, 22, 33, 44, 55, 66, 77 } (pongo los numeros asi para identificar las posiciones mas facilmente)

y luego tengo una funcion que me dice

return (VALUE) ( ( ( ( ( p[3] - x ) * ( unsigned ) p[6] ) >> ( p[7] - 1 ) ) + 1 ) >> 1 );

el valor que me devuelve es el resultado de hacer lo siguiente:

resta "x" a "33" y multiplicalo por "66"
el resultado lo mueves "77" menos uno posiciones a la derecha
a lo que queda le sumas 1
y todo lo anterior lo desplazas otra vez una posicion a la derecha

verdad??????

Ejemplo concreto:

x = 3A
P[8] = { 00, 1A, B2, EB, 9C, 04, 8F, 05 }

quedaría:

return (VALUE) ( ( ( ( ( EB - 3A ) * 8F ) >> ( 05 - 01 ) ) + 01 ) >> 1 );

=

return (VALUE) ( ( ( ( B1 * 8F ) >> 04 ) + 01 ) >> 1 );

=

return ( VALUE ) ( ( ( 62DF >> 04 ) + 01 ) >> 1 );

=

return ( VALUE ) ( ( 62D + 01 ) >> 1 );

=

return (VALUE) (62E >> 1);

=

return (VALUE) (317);

Sería esto correcto??
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Confirmacion para funcion con punteros

Publicado por Tom (615 intervenciones) el 12/01/2007 10:11:50
¿ Eso es Visual ?
Yo supongo que si haces x >> 76 el resultado será 0 (a no ser que el compilador de VC use el "acumulador" en los desplazamientos, cosa que dudo).

Si le sumas uno, pero lo vuelves a desplazar, vuelve a ser 0.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Confirmacion para funcion con punteros

Publicado por Nelek (816 intervenciones) el 12/01/2007 12:59:50
No, eso es C o C++, es parte del codigo de un programa que tengo que entender lo que hace para poder comunicarlo con el mio. Mejor escribo mas codigo para evitar jaleos:

static VALUE fi ( register VALUE x, register const BYTE * p )
{
//...
if ( x < p[1])
{
//...
return ´(VALUE) ( ( ( ( ( x - p[0] ) * (unsigned) p[4] ) >> ( p[5] - 1) ) + 1 ) >> 1 );
}
//...
return ´(VALUE) ( ( ( ( ( x - p[3] ) * (unsigned) p[6] ) >> ( p[7] - 1) ) + 1 ) >> 1 );
}

esta es la funcion que me vuelve un poco loco. Como interpretar los resultados que me devuelve lo se, lo que no se es como me llegan dichos resultados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Confirmacion para funcion con punteros

Publicado por Tom (615 intervenciones) el 12/01/2007 13:43:58
Pues, desde luego hace lo que tú pensabas. Lo que parece difícil de ver es para qué lo hace ;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Confirmacion para funcion con punteros

Publicado por Nelek (816 intervenciones) el 12/01/2007 16:43:52
El para que, es dar muchos quebraderos de cabeza a todos aquellos que quieren ampliar ese modulo traductor :P

Pero bueno, sabiendo que tenia razon... pues algo avanzo, gracias :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar