利用位操作、移位操作进行取余 求取整数部分和小数部分 二进制乘法

本文深入探讨了二进制下的乘法、除法及求余数的高效算法,特别是利用位操作实现快速计算,适用于计算机科学与编程领域的优化实践。

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

1 二进制乘法

跟十进制一样,
如一个8bit数字乘10(1010),如下:
在这里插入图片描述

乘以5就是乘(0101)

2求余数

求 n % 32 = ???

思路

可以将其转换为 n & (32-1) 或者 n - (n>>5)<<5

注意:只能对2n取余数才能位操作和移位。

(1)与操作

a % b = a & (b-1)(b=2n)
即:a % 2n = a & (2n-1)

例如:14%8,取余数,相当于取出低位,而余数最大为7,14二进制为1110,8的二进制1000,8-1 = 7的二进制为0111,由于现在低位全为1,让其跟14做&运算,正好取出的是其低位上的余数。1110&0111=110即6=14%8;

(2)移位

(n>>5)为除以25的商,<<5为乘以32,最后做差为余数

eg

求 500除以32的余数:

用%的方法:500%32=20

使用移位的思路: 先求出500除以32的整数,再用500减去这个整数,即可得到余数

  • J =500>> 5;//右移位5 相当于除以32得到商

  • J<<=5;//求得32的整数

  • J=500-J;//求得余数–就要的结果20

3 除法

二进制
3’b100/3’b010
等价于4/2=2.可以用乘法验证

如果是
2’b11/2’b10(2^1)
等价于3/2=1余数1(1.5),小数为0.5

求整数和余数可以用上述方法。

求小数的大小

小数部分是除法的不足除数的余数表示的
如3/2=1余数1(1.5),小数为0.5,小数大小就是0.5*10=5

*10的方法可以用第一部分理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值