Вы можете вызвать еще один Bash с другим bash_profile. Также вы можете создать специальный bash_profile для использования в среде multi-bashprofile.
Помните, что вы можете использовать функции внутри bashprofile, и эти функции будут доступны во всем мире. например, «функция user {export USER_NAME $ 1}» может устанавливать переменную во время выполнения, например: user olegchir & amp; & amp; env | грег олегчир
>>>
- логический сдвиг , >>
- арифметический сдвиг .
Целые числа со знаком используют старшие биты для обозначения знака.
Таким образом, >>
сохраняет знак, а >>>
- нет » т. Вот почему >>
называется арифметическим сдвигом, а >>>
- логическим сдвигом.
Таким образом , вы можете сделать (предполагая 32-битные целые числа) следующее:
-10 >> 1
дает -5 ( 0xFFFFFFF6 >> 1
дает 0xFFFFFFFB - обратите внимание, что старший бит остается то же самое.) -10 >>> 1
дает 2147483643 ( 0xFFFFFFF6 >>> 1
дает 0x7FFFFFFB - обратите внимание, что все биты были сдвинуты, поэтому старший бит теперь равен нулю. Число больше не является отрицательным согласно арифметике с дополнением до двух.) Для положительных целых чисел, >>
и >>>
действуют одинаково, поскольку старший бит уже равен нулю.
Это также объясняет, почему нет необходимости в операторе <<<
. Поскольку знак будет удален при сдвиге битов влево, он не будет отображаться ни на какую разумную арифметическую операцию.
Из Примечания к Java: Побитовые операторы :
n >> p (сдвиг вправо) Сдвигает биты на n правых p позиций. Если n является числом со знаком дополнения до 2, знаковый бит сдвигается в старшие позиции.
Пример: 5 >> 2 = 1
n >>> p (сдвиг вправо) Сдвигает биты на n правых p позиций. Нули сдвигаются в старшие позиции.
Пример: -4 >>> 28 = 15
Арифметический сдвиг >> - это деление на два для целых чисел со знаком, а логический сдвиг >>> - это деление на два для беззнаковых чисел (если вы интерпретируете битовый шаблон в подписанном Java int как беззнаковое целое).
Правильный ответ публиковался более одного раза, но не из авторитетного источника.
Это из ] JLS §15.19 Операторы сдвига :
Операторы сдвига включают левый сдвиг
<<
, сдвиг вправо со знаком>>
и сдвиг вправо без знака>>>
; они синтаксически левоассоциативны (группируются слева направо). Левый операнд оператора сдвига - это значение, которое нужно сдвинуть; правый операнд определяет расстояние сдвига....
Значение
n >> s
равноn
сдвинутым вправоs
позициям битов с расширением знака. Результирующее значение равно ⌊ n / 2 s ⌋. Для неотрицательных значенийn
это эквивалентно усечению целочисленного деления, вычисляемому оператором целочисленного деления/
, на два в степениs
.] Значение
n >>> s
составляетn
сдвинутых вправоs
битовых позиций с нулевым расширением. Еслиn
положительно, то результат такой же, как и дляn >> s
; еслиn
отрицательно, результат равен результату выражения(n >> s) + (2 << ~ s)
, если тип левого операнда -int
, и результат выражения(n >> s) + (2L << ~ s)
, если тип левого операндаlong
. Добавленный член(2 << ~ s)
или(2L << ~ s)
отменяет распространенный знаковый бит. (Обратите внимание, что из-за неявного маскирования правого операнда оператора сдвига,~ s
как расстояние сдвига эквивалентно31-s
при сдвигеint
значение и63-s
при сдвиге значенияlong
.)
some info
the >> operator preserves the leftmost bits. The leftmost bits are filled with the previous content. This is to do with sign extension. In this case there is a 1 at the left and it is preserved. If you do not want to keep the 1 to the left, use the >>> operator which shifts 0's into the leftmost bits
Это связано с математикой значений со знаком. >>>
сводит нули к битам высокого порядка, >>
сохраняет знаковый бит и втягивает его.
Знак >> - это арифметический сдвиг, который сохраняет знаковый бит в любых «свободных» битах. Другой - логический сдвиг, который заполняет пустые места нулями.
Для положительных чисел нет разницы. Отрицательные числа (дополнение до двух) будут заполнены нулями для >>> и единицами для >>.
1010 0110 >>> 2 = 0010 1001
1010 0110 >> 2 = 1110 1001