求无符号字符型数据乘积的高一半
两个无符号字符型数据x和y的乘积是unsigned int数据。程序通过unsigned_high_prod( )函数调用signed_high_prod( )实现。signed_high_prod( )函数把x和y作为带符号数,计算得到它们乘积的高一半(char)。
程序代码
typedef unsigned char u8;
u8 unsigned_high_prod(u8 x, u8 y);
char signed_high_prod(char x, char y);
unsigned int z;void main()
{static u8 x, y,huxy;x=255;y=255;huxy=unsigned_high_prod(x, y);while(1);
}
u8 unsigned_high_prod(u8 x, u8 y)
{u8 r;r=signed_high_prod(x, y);return r;
}
char signed_high_prod(char x, char y)
{char hxy,i=1;if(x<0&&y<0)z=(y+x)*(i<<8)+(i<<16)+x*y;else if(x<0&&y>0)z=y*(i<<8)+x*y;else if(x>0&&y<0)z=x*(i<<8)+x*y;else z=x*y;z>>=8;hxy=(char)z;return hxy;
}
运行结果
255255=0xFE01。