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

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的方法可以用第一部分理解。

发布了466 篇原创文章 · 获赞 279 · 访问量 75万+

猜你喜欢

转载自blog.csdn.net/qq_35608277/article/details/105436342