3

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

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

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

不起作用。以下也不行。

echo "$((2#1111101010))"

我能做些什么?

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

4

1 回答 1

6

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

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

-22(您的示例不正确)。

于 2014-01-24T17:45:48.647 回答