在网上看了一个资料,说的很简短,自己就把它展开一下
假设需要求:Y = 10 * A ( X是整数 )
将10展开,像这样:10 == 2^3 + 2^1 则 Y = A<<3+ A<<1; 设X = 3,则,Y = 3<<3 + 3<<1 = 24 + 6 = 30
又如: 1000 = 1024 - 16 - 8 = 2^10 - 2^4 - 2^3 则如有下式: Y = 1000*A设A=5,则有: Y = 5<<10 - 5<<4 - 5<<3 = 5120 - 80 - 40 = 5000
又如: 29 = 32- 2 - 1 = 2^5 - 2^1 - 2^0 (1) 或者 29 = 16 + 8 + 2 + 1 = 2^4 + 2^3 + 2^1 + 2^0 (2) 则如有下式: Y = 29 * A设A=5,则有: Y = (5<<5) - (5<<1) - (5<<0) = 160- 10 - 5 = 145 或者 Y = (5<<4)+(5<<3)+(5<<1)+(5<<0) = 80+40+20+5 = 145 可以根据实际需要进行式(1)和式(2)的拆分,显然使用 式(1)要比式(2)简洁,所以选择式(1)来运算。
|