Почему я получаю странное смещение бита результатов отрицательной величиной?

Вот быстрый пример:

я нахожу синтаксис списка разделенных запятой значений довольно полезным для создания вызовов функции:

% Build a list of args, like so:
args = {'a', 1, 'b', 2};
% Then expand this into arguments:
output = func(args{:})
12
задан Community 23 May 2017 в 12:17
поделиться

2 ответа

Невозможно выполнить сдвиг на отрицательное значение. Вы также не можете выполнить сдвиг на большое положительное число.

Из спецификации C # ( http://msdn.microsoft.com/en-us/library/a1sway8w.aspx ):

If first operand is an int or uint (32-bit quantity), 
the shift count is given by the low-order five bits of second operand.

...


The high-order bits of first operand are discarded and the low-order 
empty bits are zero-filled. Shift operations never cause overflows.
16
ответ дан 2 December 2019 в 06:08
поделиться

В языках типа C << -1 не переводится в >> 1 . Вместо этого берутся 5 младших битов сдвига, а остальные игнорируются, поэтому в этом случае дополнение до двух -1 преобразуется в << 31 .

Вы получить те же результаты, например. JavaScript javascript: alert (8 << - 8) .

9
ответ дан 2 December 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: