通过加减法、移位实现整数乘、除法(仅仅保留商)

本文介绍了如何通过加减法和移位操作来实现32位整数的乘除法,重点讨论了非负整数和负数的处理方法,涉及位运算在计算过程中的应用,旨在理解和优化整数算术运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过加减法、移位实现整数乘、除法(仅仅保留商)

1. 先导

计算机中,整数的乘法、除法、取模、取余的计算底层均是使用 移位 + 加减法 实现,基于此,我们来实现 32 位的整数乘除法

2. 非负整数的乘除法

2.1 乘法

32 位的乘法,最大值相乘不会超过 64 位,无论是否有符号,但是两个 int 类型的数相乘,结果不会超过 64 位,故使用 64 位的 long 保留结果

    // 方法1:仅仅通过加法进行实现乘法
    //  缺点:耗时长
    public long plus1(int multiplier, int multiplicand) {
   

        if(multiplier == 0 ^ multiplicand == 0) {
   
            return 0;
        }

        int count = Math.min(multiplier,multiplicand);
        int num = Math.max(multiplier,multiplicand);

        long res = 0;

        for(int i = 0; i < count;i++) {
   
            res += num;
        }
        return res;
    }

    // 方法2:通过移位实现乘法
    // 缺点:初见难以理解
    public long plus2(int multiplier, int multiplicand) {
   

        if(multiplier == 0 ^ multiplicand == 0) {
   
            return 0;
        }

        long res = 0;
        while(multiplier > 0) {
   
            if((multiplier & 1) == 1) {
   
                res += multiplicand;
            }
            // 乘数右移 被乘数左移 或者 乘数左移 被乘数左移
            multiplicand <<= 1;
            multiplier >>= 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值