我有10位带符号的二进制数。我知道有两种shell / bash方法可以将它们转换为小数,但无法识别签名。
1111101010应转换为-22而不是1002。
echo "ibase=2;obase=A;1111101010"| bc
不起作用。以下都没有。
echo "$((2#1111101010))"
我该怎么办?
编辑:给出错误的预期结果;错误:-220,右:-22。
答案 0 :(得分:6)
也许有一种更简单的方法,但它只是简单的数学:
n=1111101010
sign=${n:0:1}
num=${n:1}
num=$((2#$num))
if [[ $sign == 1 ]]; then
num=$(($num-512))
fi
echo $num
-22(你的例子不正确)。