Я не знаю, как объявлять двоичные числа; но ваш синтаксис неверен.
У '@' был собственный анализатор выражений, и каким-то образом он путался с основным анализатором, если выражение не заключено в скобки. Согласно справочной странице -, в некоторых случаях требуются пробелы, включающие побитовые операторы. Я предлагаю использовать пробелы везде, так как там было много ошибок.
Это будет работать гладко:
@ y = 1001; @ z = 0110;
@ x = ( $y | $z ); echo $x
Обратите внимание, что, как и в C, числа, начинающиеся с 0, являются восьмеричными, поэтому значение $z равно 72 в десятичном виде.
Восьмеричные и шестнадцатеричные числа используются потому, что они точно представляют двоичные числа. Восьмеричная цифра представляет 3 двоичных цифры.
binary <--> octal
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
Если значения y и z, которые вы записали, представлены в двоичном формате, это правильная форма (с использованием восьмеричных чисел)
@ y = 011; @z = 006;
@ x = ( $y | $z ); echo $x
15
Существует еще одно решение: используйте любую команду -строкового калькулятора, которую вы хотите, используя выражение в обратных -кавычках. Я предлагаю попробоватьcalc , bc или awk с этим порядком.
Пример с вычислением:
set x = `calc '0b1001 | 0b110'`; echo $x
15
15 (дес )= 017 (окт )= 0xF (шестн )= 0b1111 (бин)
переключитесь с режима UEFI на устаревший режим в настройках BIOS, тогда он точно будет работать