通过Java代码来模拟乘法器

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有加法器,然后软件层面通过加法来实现乘法

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

Zepto核心模块之工具方法拾遗

本文作者:IMWeb 谦龙 原文出处:IMWeb社区 未经同意,禁止转载 前言 平时开发过程中经常会用类似each、map、forEach之类的方法...

29660
来自专栏佳爷的后花媛

java基础知识

Vector、Stack、HashTable、ConcurrentHashMap、Properties

31150
来自专栏Spark生态圈

[Spark SQL] 源码解析之Parser

Parser就是将SQL字符串切分成一个个Token,再根据一定语义规则解析为一棵语法树。我们写的sql语句只是一个字符串而已,首先需要将其通过词法解析和语法解...

34320
来自专栏Java面试通关手册

可能是把Java内存区域讲的最清楚的一篇文章

哈哈 皮一下!我自己开源的一个Java学习指南文档。一份涵盖大部分Java程序员所需要掌握的核心知识,正在一步一步慢慢完善,期待您的参与。Github地址:ht...

10520
来自专栏偏前端工程师的驿站

意译:《JVM Internals》

译者语                                  为加深对JVM的了解和日后查阅时更方便,于是对原文进行翻译。内容是建立在我对JVM的认...

25270
来自专栏华仔的技术笔记

IOS数组为空的处理

39390
来自专栏从零开始学 Web 前端

09 - JavaSE之线程

PS: 如果我们没有 new一个 Thread 对象出来,而是直接使用 MyThread 的 run 方法(mt.run()),这就是方法调用,而不是启动线程了...

14750
来自专栏北京马哥教育

一文读懂架构师都不知道的isinstance检查机制

16140
来自专栏ppjun专栏

kotlin internal 关键字使用

internal 修饰类的方法,表示这个类方法只适合当前module使用,如果其他module使用的话,会找不到这个internal方法或者报错。下面我们在mo...

2.1K20
来自专栏全沾开发(huā)

拿Proxy可以做哪些有意思的事儿

26580

扫码关注云+社区

领取腾讯云代金券