利用位操作、移位操作进行取余 求取整数部分和小数部分 二进制乘法
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的方法可以用第一部分理解。