Направление против знака побитового сдвига/поворота

Для операций побитового сдвига (или вращения, циркуляции) у нас обычно есть оператор, я имею в виду два из них, например

x << n
x >> n

для сдвига влево или вправо на x на n бит.

Мы хотим определить одну функцию

bitshift(x, n)

Перед этим мы должны определить, какой сдвиг использовать для положительного и отрицательного n - каков знак каждого направления сдвига (или поворота).

Есть ли определение или соглашение для этого?

(Обратите внимание, что этот вопрос не имеет ничего общего с подписанными/неподписанными типами)

ОБНОВЛЕНИЯ

Обратите внимание, что я не прошу подробностей реализации этой функции, даже если она может быть в чем-то связана.

Существуют аналогичные функции в языках, подобных схемам/лиспам, например ash, которые делают сдвиг влево для положительного n


person mykhal    schedule 14.11.2012    source источник
comment
Я не думаю, что существует соглашение об использовании знака для указания направления.   -  person ScoPi    schedule 14.11.2012
comment
ScoPi: я думаю, что некоторые экземпляры таких функций могут быть в некоторых функциональных языках.   -  person mykhal    schedule 14.11.2012


Ответы (2)


Поскольку сдвиг вправо на k позиций равен умножению на 2^-k, а сдвиг влево равен умножая на 2^k, я думаю, это должно дать вам подсказку.

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

person plesiv    schedule 14.11.2012
comment
я склонен согласиться.. можно рассматривать как более математическое описание чувства, что сдвиг влево увеличивает x .. :) - person mykhal; 14.11.2012

Вы можете использовать отрицательное число в качестве аргумента

Например

x << n

поэтому передайте n=2, если вы хотите сдвинуть влево на две позиции, и передайте n=-2, если вы хотите сдвинуть вправо на две позиции.

person pallavi    schedule 14.11.2012
comment
красивый. к сожалению, это не относится ни к одному языку.. (например, Python это не нравится) - person mykhal; 14.11.2012