开发者

Bitwise Operations -- Arithmetic Operations

开发者 https://www.devze.com 2022-12-29 22:43 出处:网络
Can you please explain the below lines, with some good examples. A left arithmetic shift by n is equivalent to multiplying by 2n

Can you please explain the below lines, with some good examples.

A left arithmetic shift by n is equivalent to multiplying by 2n (provided the value does not overflow).

And:

A right arithmetic shift by开发者_开发知识库 n of a two's complement value is equivalent to dividing by 2n and rounding toward negative infinity. If the binary number is treated as ones' complement, then the same right-shift operation results in division by 2n and rounding toward zero.


I will explain what happens in a base that we're more familiar with: 10.

In base 10, let's say you have a number N=123. Now, you "shift" this number to the left k=3 positions, filling the emptied digits with 0. So you get X=123000.

Note that X = N * 10k.

The case with base 2 is analogous.

 Example 1 (base 10)   |  Example 2 (base 2)
                       |
 N        =    123     |  N       =   110101 (53 in base 10)
 k        =      3     |  k       =        2 (in base 10)
 N << k   = 123000     |  N << k  = 11010100 (212 in base 10)
                       |
 10^k     =   1000     |  2^k     =      100 (in base 2; 4 in base 10)
 N * 10^k = 123000     |  N * 2^k = 11010100 (53 * 4 = 212 in base 10)
                       |

The case with right shift is simply a mirror of the process, and is also analogous in base 10. For example, if I have 123456 in base 10, and I "shift" right 3 positions, I get 123. This is 123456 / 1000 (integer division), where 1000 = 103.


http://en.wikipedia.org/wiki/Arithmetic_shift


It's easy to create your own examples.

Consider five which is 101 in binary. Left shift it once and you get 1010 which is binary for ten. Do it again and you get 10100 which is twenty and so on..

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号