Поскольку битовые сдвиги работают в двоичном формате, давайте посмотрим на двоичное представление.Для этих операторов используется 32 бита.
Decimal | Binary
200 | 0000 0000 0000 0000 0000 0000 1100 1000
Теперь сдвиньте влево на 24 позиции ...
200 | 0000 0000 0000 0000 0000 0000 1100 1000
-939524096 | 1100 1000 0000 0000 0000 0000 0000 0000
Самое главное, обратите внимание, что первый бит теперь равен 1
, чтоуказывает отрицательное число в знаковых 32-разрядных числах.
Следующее, что следует отметить, это то, что >>
является знаковым смещением смещения вправо.Это означает, что когда вы снова сдвигаетесь вправо, вы сдвигаете копии первого бита.
-939524096 | 1100 1000 0000 0000 0000 0000 0000 0000
-56 | 1111 1111 1111 1111 1111 1111 1100 1000
Однако, если вы вместо этого используете >>>
, вы получаете сдвиг вправо с нулевым заполнением.Как следует из названия, оно всегда сдвигается в 0
с.
-939524096 | 1100 1000 0000 0000 0000 0000 0000 0000
200 | 0000 0000 0000 0000 0000 0000 1100 1000