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

Bash 将有符号的10位二进制数转换为十进制数?,bash,shell,bc,Bash,Shell,Bc,我有10位有符号二进制数。我知道将它们转换为小数的两种shell/bash方法,但符号性还未被识别 11111 01010应转换为-22,而不是1002 echo "ibase=2;obase=A;1111101010"| bc 不起作用。以下情况也不例外 echo "$((2#1111101010))" 我能做什么 编辑:给出错误的预期结果;错:-220,对:-22。也许有一个更简单的方法,但它只是简单的数学: n=1111101010 sign=${n:0:1} num=${n:1} n

我有10位有符号二进制数。我知道将它们转换为小数的两种shell/bash方法,但符号性还未被识别

11111 01010应转换为-22,而不是1002

echo "ibase=2;obase=A;1111101010"| bc
不起作用。以下情况也不例外

echo "$((2#1111101010))"
我能做什么


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

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

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

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

去掉前导数字,做一些数学运算。另外,你的例子正确吗?我看不是-220。对不起,我跳过了另一个计算11111 01010是-22。我的答案是基于预期的输出(而不是提供的输入)。你的答案更好,所以我删掉了我的(并投了你的)。1002-1024=-2.2就是这样,很简单。谢谢。另外,我要补充一点,为了达到我的预期结果,表示位必须保持不变,或者需要减去512而不是1024。@PiEnthusiast:这在你发表评论之前很久就被修复了。