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

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的方法可以用第一部分理解。
————————————————
版权声明:本文为CSDN博主「rrr2」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35608277/article/details/105436342

posted @ 2023-12-06 16:14  苍月代表我  阅读(285)  评论(0)    收藏  举报