原码一位乘(C语言实现)

1.算法引入:c语言中,如果我们要进行两个数(op1,op2)的乘法,便可以直接输入op1*op2语句即可。但是我们知道,在计算机中,数值都是由一串二进制码来组成的。所以,计算机在执行c语言中op1*op2这条指令的时候,其实底层实现的是两个原码(或补码)的乘法运算。(具体是原码or补码,取决于操作数的类型,这里不多赘述)

2.基本原理:要理解计算机中两个操作数的机器码所对应的乘法运算,需要引入一位乘的计算方法。

类似于笔算乘法,以小数乘法为例,我们可以将操作数分为乘数和被乘数,通过被乘数的加法(其实是0、1的带进位的异或运算)以及被乘数的移位实现。

question:如果在c语言编码中,我们通过移位运算和加法运算之间实现乘法,那么对于底层而言,岂不是就减少了编译时间吗?

参考下图:

步骤:加法-->移位-->加法-->移位持续进行

3.代码实现:

(ps:op1和op2可以是任何8bits数值,读者可以进行研究)

//为啥是8bits??-------->因为是unsigned char

#include<stdio.h>

int main()
{
    unsigned char op1 =10 ;
    unsigned char op2 =10 ;
    int res = 0;
    while(op2!=0){
        if((0x01&op2)){
            res += op1;
        }
        //被乘数op1左移一位,相当于乘法中下一个被乘数进位
        op1 = op1<<1;
        //乘数op2右移一位
        op2 = op2>>1;
    }
    printf("%d",res);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_56603583/article/details/124175483
今日推荐