天天看點

整理下C++位運算跟乘除法的關系

一:乘法

12 * 2 = 12 << 1

12 * 4 = 12 << 2

12 * 8 = 12 << 3

12 * 16 = 12 << 4

12 * 32 = 12 << 5

12 * 64 = 12 << 6

12 * 128 = 12 << 7

12 * 256 = 12 << 8

二:除法

12 / 2 = 12 >> 1

12 / 4 = 12 >> 2

12 / 8 = 12 >> 3

12 / 16 = 12 >> 4

12 / 32 = 12 >> 5

12 / 64 = 12 >> 6

12 / 128 = 12 >> 7

12 / 256 = 12 >> 8

使用位移運算可以提高因乘除運算帶來的效率的問題,它的缺點是存在精度損失且不直覺。 使用移位運算來避免乘法運算是一種常用技巧,不過乘數必須都是正整數,而且必須至少有一個是 2 的 n 次方,例如:2,4,8,16,32……移位運算的特點是速度快,而乘法運算速度較慢,把乘法運算轉化為移位運算可以稍微提高程式運作效率。