求无符号字符型数据乘积的高一半

两个无符号字符型数据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;
}

运行结果

求无符号字符型数据乘积的高一半_第1张图片

255\times255=0xFE01。

你可能感兴趣的:(算法)