将带符号的10位二进制数转换为十进制?

PiE*_*ast 3 bash shell bc

我有10位带符号的二进制数.我知道两种shell/bash方法将它们转换为小数但是无法识别签名.

1111101010应转换为-22而不是1002.

echo "ibase=2;obase=A;1111101010"| bc
Run Code Online (Sandbox Code Playgroud)

不起作用.以下都不是.

echo "$((2#1111101010))"
Run Code Online (Sandbox Code Playgroud)

我能做什么?

编辑:给出错误的预期结果; 错:-220,右:-22.

Kar*_*ath 6

也许有一种更简单的方法,但它只是简单的数学:

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

-22(你的例子不正确).