16位正整数乘法


#include
#include

#include
using namespace std;

int main(int argc, char *argv[])
{
unsigned short k3, k1, k2, k4;
unsigned int final_val;
unsigned short sc1,sc2,sa1,sa2;
unsigned short *val1, *val2;
unsigned int F1 = 0, F2 = 0, F3= 0, F4 = 0;
char m1[2] = {'z', 'y'};
char m2[2] = {'y', 'x'};

val1 = (unsigned short *)m1;
val2 = (unsigned short *)m2;

printf("\n m1=0x%x; m2=0x%x \n", *val1, *val2);
char *c1 = (char *)m1; //
char *c2 = (char *)(m1 + 1); //

char *a1 = (char *)m2; //
char *a2 = (char *)(m2 + 1); //

sc1 = *c1;
sc2 = *c2;

sa1 = *a1;
sa2 = *a2;

F1 = sc1 * sa1;
if ((F1 & 0xff00) > 0)
{
k1 = (F1 & 0xff00) >> 8;
F1 = F1 & 0xff;
F2 += k1;
}

F2 += sc2 * sa1;
if ((F2 & 0xff00) > 0)
{
k2 = (F2 & 0xff00) >> 8;
F2 = F2 & 0xff;
}

F3 = sc1 * sa2;
if ((F3 & 0xff00) > 0)
{
k3 = (F3 & 0xff00) >> 8;
F3 = F3 & 0xff;
F4 += k3;
}

F4 += sc2 * sa2;
if ((F4 & 0xff00) > 0)
{
k4 = (F4 & 0xff00) >> 8;
//F4 = F4 & 0xff;
}

final_val = F1 + ((F2 + F3) << 8) + ((k2 + F4) << 16);

printf("\nF1=0x%x, F2=0x%x, F3=0x%x, F4=0x%x final= 0x%x \n", F1, F2, F3, F4, final_val);