移位实现特殊乘除法运算
当一个数乘以或者除以 2 的整数倍时,比如:
a = a * 4;
b = b / 4;
可以优化为:
a = a << 2;
b = b >> 2;
说明:
除以2 = 右移1位 乘以2 = 左移1位 除以4 = 右移2位 乘以4 = 左移2位 除以8 = 右移3位 乘以8 = 左移3位 … …
System.out.println(66 /64); //1
System.out.println(66 >> 6); //1
使用位操作代替求余操作
由于我们知道位运算比较高效,在某些情况下,当b为2的n次方时,有如下替换公式:
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;
此公式只适用b=2n,是因为可以保证b始终只有最高位为1,其他二进制位全部为0,减去1,之后,可以把高位1消除,其他位都为1,而与1做&运算,会保留原来的数。
FEATURED TAGS
algorithm
algorithmproblem
architecturalpattern
architecture
aws
c#
cachesystem
codis
compile
concurrentcontrol
database
dataformat
datastructure
debug
design
designpattern
distributedsystem
django
docker
domain
engineering
freebsd
git
golang
grafana
hackintosh
hadoop
hardware
hexo
http
hugo
ios
iot
java
javaee
javascript
kafka
kubernetes
linux
linuxcommand
linuxio
lock
macos
markdown
microservices
mysql
nas
network
networkprogramming
nginx
node.js
npm
oop
openwrt
operatingsystem
padavan
performance
programming
prometheus
protobuf
python
redis
router
security
shell
software testing
spring
sql
systemdesign
truenas
ubuntu
vmware
vpn
windows
wmware
wordpress
xml
zookeeper