Побитовые операции - Арифметические операции - PullRequest
0 голосов
/ 10 мая 2010

Можете ли вы объяснить ниже строки с некоторыми хорошими примерами.

Арифметический сдвиг влево на n равен эквивалентно умножению на 2 n (при условии, что значение не переполнение).

И

Правильная арифметика сдвиг на п значения дополнения до двух эквивалентно делению на 2 n и округление в сторону отрицательной бесконечности. Если двоичное число трактуется как единица дополнить, то же правое смещение результаты операции делятся на 2 n и округление до нуля.

Ответы [ 3 ]

3 голосов
/ 10 мая 2010

Я объясню, что происходит с базой, с которой мы более знакомы: 10.

В базе 10, скажем, у вас есть число N = 123. Теперь вы «сдвигаете» это число влево на k = 3 позиции, заполняя пустые цифры 0. Таким образом, вы получаете X = 123000.

Обратите внимание, что X = N * 10 k .

Корпус с основанием 2 аналогичен.

 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)
                       |

Случай со смещением вправо является просто отражением процесса, а также аналогичен основанию 10. Например, если у меня 123456 в основании 10 и я "сдвигаю" три позиции вправо, я получаю 123. 123456/1000 (целочисленное деление), где 1000 = 10 3 .

1 голос
/ 10 мая 2010
0 голосов
/ 10 мая 2010

Легко создавать свои собственные примеры.

Рассмотрим пять, которые 101 в двоичном виде.Сдвиньте его влево один раз, и вы получите 1010, что является двоичным для десяти.Сделайте это снова, и вы получите 10100, что составляет двадцать и т. Д.

...