kernel中的除法总结

在lib/div64.c 中提供了除法操作
static inline u64 div_u64(u64 dividend, u32 divisor); //无符号除法操作:除数是无符号64bit,被除数是无符号32
static inline s64 div_s64(s64 dividend, s32 divisor);//有符号除法操作:除数是有符号64bit,被除数是有符号32
static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder);//无符号除法操作:除数是无符号64bit,被除数是无符号32,remainder为余数

static inline s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder);//有符号除法操作:除数是有符号64bit,被除数是有符号32,remainder为余数
还有一个do_div,主要用于无符号32除以无符号32
        u64 suspend
        do_div(suspend, 100);
        if (sbuf.f_bavail <= suspend) {
            acct->active = 0;
            pr_info("Process accounting paused\n");
        }
例如这里就表示suspend=suspend/100.
#if BITS_PER_LONG == 64

# define do_div(n,base) ({                    \
    uint32_t __base = (base);                \
    uint32_t __rem;                        \
    __rem = ((uint64_t)(n)) % __base;            \
    (n) = ((uint64_t)(n)) / __base;                \
    __rem;                            \
 })
#endif

从do_div的实现看结果是保存在n中的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值