打印
[开发资料]

通过2的幂次进行除法和取余数的快捷方法优化

[复制链接]
171|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szt1993|  楼主 | 2024-3-7 14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果除法中的除数是2的幂次,我们可以更好的优化除法。
编译器使用移位操作来执行除法。因此,我们需要尽可能的设置除数为2的幂次(例如64而不是66)。
并且依然记住,无符号unsigned整数除法执行效率高于有符号signed整形出发。

typedef unsigned int uint;

uint div32u (uint a)
{
     return a / 32;
}
int div32s (int a)
{
    return a / 32;
}

上面两种除法都避免直接调用除法函数,并且无符号unsigned的除法使用更少的计算机指令。
由于需要移位到0和负数,有符号signed的除法需要更多的时间执行。

使用特权

评论回复
沙发
LOVEEVER| | 2024-3-9 16:34 | 只看该作者
有符号signed的除法需要更多的时间执行

使用特权

评论回复
板凳
星辰大海不退缩| | 2024-3-11 09:54 | 只看该作者
使用无符号unsigned的除法使用更少的计算机指令

使用特权

评论回复
地板
OKAKAKO| | 2024-3-11 22:18 | 只看该作者
算术除法对于二进制有时候非常简单,还是看具体的过程

使用特权

评论回复
5
小小蚂蚁举千斤| | 2024-3-18 13:57 | 只看该作者
要想减少计算机运行实简,无符号unsigned的除法使用更少的计算机指令

使用特权

评论回复
6
小夏天的大西瓜| | 2024-3-19 11:10 | 只看该作者
编译器使用移位操作来执行除法比较方便

使用特权

评论回复
7
中国龙芯CDX| | 2024-3-21 15:13 | 只看该作者
移位操作对于2的倍数的被除数非常高效

使用特权

评论回复
8
jf101| | 2024-3-22 12:05 | 只看该作者
移位除法非常适合2的倍数的除数,高效

使用特权

评论回复
9
szt1993|  楼主 | 2024-3-25 15:31 | 只看该作者
jf101 发表于 2024-3-22 12:05
移位除法非常适合2的倍数的除数,高效

对于除法移位非常高效

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

161

主题

1693

帖子

4

粉丝