Что такое арифметическое смещение влево 01001001? - PullRequest
7 голосов
/ 11 января 2012

Я бы подумал, что это 00010010 то есть он пытается сохранить бит знака как

С другой стороны, логическое смещение влево на 1 позицию будет 10010010

Это правильно?

Ответы [ 4 ]

7 голосов
/ 11 января 2012

Для левого смещения арифметическое и логическое смещение одинаковы.

Разница только для сдвига вправо, когда арифметическое сдвиг вправо скопирует старый MSB в новый MSB после сдвига, таким образом, предотвращая преобразование отрицательного числа в положительное при сдвиге.

Википедия содержит более подробное объяснение.

4 голосов
/ 11 января 2012

В Java << - это логический сдвиг влево.0 всегда добавляется как младший бит.

(Обратите внимание, что Java будет продвигать значение [байта], о котором идет речь, поэтому необходимо позаботиться о маскировании октет! В противном случае вы сохраните сдвинутые биты, которые могли бы включать «1».)

Однако статья в Википедии о Арифметическое смещение указывает, что арифметическое смещение влево может привести к ошибке переполнения:

... Обратите внимание, что арифметическое смещение влево может вызвать переполнение; этоЕдинственное отличие, которое отличается от логического сдвига влево.

(Это не , как в случае с Java, но только для того, чтобы иметь в виду.)

Счастливое кодирование

1 голос
/ 10 сентября 2017

Да, это правильно.

Арифметическое смещение влево x на n мест равно x * (2^n). Итак, в вашем примере это сдвиг влево на 01001001 на 1 место, равное 10010010 (73 * 2¹ = 146).

0 голосов
/ 11 января 2012

Вы правы, когда вы оставили сдвиг на 1-битное положение. Это равно 10010010.

когда вы сдвинете 4 бита влево следующим образом, вы получите следующий ответ.

01001001 << 4 = 10010000

когда вы сдвигаете 4 бита вправо следующим образом, вы получите следующий ответ.

01001001 >> 4 = 00000100

Биты, оставшиеся пустыми в результате сдвига, заполняются нулями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...