【问题标题】:Convert signed 10 bit binary numbers to decimal?将带符号的 10 位二进制数转换为十进制?
【发布时间】:2014-02-15 19:32:27
【问题描述】:

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

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

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

不起作用。以下也不行。

echo "$((2#1111101010))"

我能做什么?

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

【问题讨论】:

  • 去掉前面的数字,做一些数学运算。
  • 另外,你的例子正确吗?在我看来它不是 -220。
  • 对不起,我跳过了另一个计算 1111101010 是 -22。

标签: bash shell bc


【解决方案1】:

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

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

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

【讨论】:

  • 我的回答是基于预期的输出(不是提供的输入)。你的答案更好,所以我删除了我的(并投票赞成你的)。
  • 1002 - 1024 = -2.2 就是这样,很简单。谢谢。
  • 另外,我应该补充一点,为了达到我的预期结果,必须保留表示位,或者需要减去 512 而不是 1024。
  • @PiEnthusiast:早在你发表评论之前就已经修复了。
猜你喜欢
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 2014-12-04
相关资源
最近更新 更多