Hola
·Tengo el siguiente problema, estoy implementado una función en apariencia muy sencilla: Tomando 2 bytes como argumento, tengo que implementar una multiplicación binaria. Explico con un ejemplo: b1 = b2 = 85d = 01010101b
01010101 x 01010101
01010101
01010101
01010101
01010101
00001000100010001
·En el fondo: uno de los bytes se deja fijo; se revisa si el bit n-ésimo (n entre 0 y 7) es 0 ó 1; si es 0 se anota un cero, si es 1 se copia el 2º byte, desplazado n lugares (multiplicado por 2 n veces, según corresponda). Finalmente se realiza un XOR entre los números resultantes, obteniendose el resultado final, el cual es un entero de 16 bits.
·Mi gran problema ocurre cuando asigno los valores... por alguna razón el compilador asigna el valor al byte más alto... por ejemplo, 85 -> 01010101 se convierte en 0101010100000000... por ende, todos los resultados posteriores son erróneos... El código que generé para realizar esto es el siguiente:
int16 lmul(int b1,int b2)
{
int i,j;
int16 byte_array[8];
int16 aux;
long aux2;
if ((b1 == 0) || (b2 == 0)) //si b1 o b2 vale 0
return 0; //devolver de inmediato un 0
else
{ // principio else
for(i=0;i<=7;i++)
{
if (bit_test(b1,i)==1)
{
aux2 = make16(0,b2);
for(j=0;j<=i;j++)
aux2 = aux2 * 2;
byte_array[i] = aux2;
}
else
byte_array[i] = 0;
}
aux = byte_array[0];
for(i=0;i<=6;i++)
{
aux = aux ^ byte_array[i+1];
}
} //fin else
return aux;
}
·Si alguien me puede echar una mano, le estaría muy agradecido.
Atte.
Fernando