cpu中乘法器的执行流程
Java模拟乘法器代码
/** * 32 bit multiplier mock * @param a * @param b * @return a * b */ public static long multiply(int a, int b) { int n = 32; // Product long product = 0; int count = 0; while (true) { count++; // 1. 检查寄存器最低位 if ((b & 0x01) == 1) { // 1a. 将乘数寄存器和乘积寄存器的内容相加,结果放入乘积寄存器 product += a; } // 2. 将“被乘数寄存器”左移一位 a <<= 1; // 3. 将“乘数寄存器”右移一位 b >>= 1; // 4. 是否已经到N次循环? if (count == n) { break; } } return product; }
注:这里没有考虑符号位,所以在参数为负数时结果可能会不正确
扩展思考
这个看来,cpu也是可以没有乘法器的了? 只需要cpu有加法器,然后软件层面通过加法来实现乘法