专栏首页IT杂记通过Java代码来模拟乘法器

通过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 条评论
登录 后参与评论

相关文章

  • Raspberry PI Nginx 安装

    Raspberry PI Nginx 安装 1.      查看系统版本信息 root@raspberrypi:/tmp# cat /etc/os-releas...

    囚兔
  • 设置jdk工具的语言环境

    临时设置     临时设置通过在jdk工具执行时加入参数,参数以“-J-D”为前缀,代表为jvm传递参数,语言设置的参数为user.language, 当要设置...

    囚兔
  • Thrift Direct Memory OOM问题解决方法

    FrameBuffer为AbstractNonblockingServer类的内部类,TThreadedSelectorServer继承了AbstractNon...

    囚兔
  • BZOJ3670: [Noi2014]动物园(KMP)

    给出一个字符串,定义$num[i]$表示在$[1, i]$区间内互不重复的相同前后缀的数量。

    attack
  • hihoCoder 1700 相似颜色

            题目链接: http://hihocoder.com/problemset/problem/1700

    Ch_Zaqdt
  • AtCoder Beginner Contest 174 A ~ E

    我看有人用指针来做的,其实道理是一样的,就是字符串中所有的R都在左边,然后所有的W都在右边就行了。

    用户7727433
  • c语言之使用typedef定义类型

    绝命生
  • BZOJ4260: Codechef REBXOR (01Tire树)

    attack
  • 2019HDU多校赛第二场 HDU 6601 Keen On Everything But Triangle( 主席树求区间第k大)

    用户2965768
  • 2020-10-22在线识图搜索引擎

    最近在逛淘宝时发现了淘宝的图片搜索功能,可能是我太Low了这个技术点已经实现很长时间了。想想自己能不能实现这个功能,起初我是这么想的,对两张图片从左上角的第一个...

    爱笑的架构师

扫码关注云+社区

领取腾讯云代金券