Преобразовать десятичные двоичные числа со знаком в десятичное?

У меня есть 10-битные двоичные числа со знаком. Я знаю два метода shell / bash, чтобы преобразовать их в десятичные числа, но подпись не распознается.

1111101010 следует преобразовать в -22, а не в 1002.

echo "ibase=2;obase=A;1111101010"| bc

не работает Ни один не делает следующее.

echo "$((2#1111101010))"

Что я могу сделать?

Изменить: дал неправильный ожидаемый результат; неправильно: -220, правильно: -22.

1 ответ

Решение

Может быть, есть более простой способ, но это просто математика:

n=1111101010
sign=${n:0:1}
num=${n:1}
num=$((2#$num))
if [[ $sign == 1 ]]; then
   num=$(($num-512))
fi
echo $num

-22 (ваш пример неверен).

Другие вопросы по тегам