x,y是两个n位的无符号整数,通过逐位判断y的每1位是0还是1,若是1,执行加法和左移操作;若是0,则只执行左移操作,能较快速的计算出x与y的乘积。
源程序:
#define uchar unsigned char uchar x,y; uchar multiply(uchar,uchar); void main() { uchar result; x=10;y=12; result=multiply(x,y); } uchar multiply(uchar x1,uchar y1) { uchar sum=0; uchar shiftedx,n,j; shiftedx=x1; n=8; //y1是8位二进制数 for(j=0;j<n;j++) { if((y1&0x01)==1) //y1的最低位为1时执行加法操作 sum=sum+shiftedx; y1=y1>>1; //y1右移1位 shiftedx<<=1; //shiftedx左移1位 } return sum; //返回乘积 }运行结果: