2014-01-24 77 views
3

我有10位帶符號的二進制數字。我知道兩種shell/bash方式將它們轉換爲小數,但無法識別簽名。將帶符號的10位二進制數轉換爲小數?

1111101010應轉換爲-22,而不是1002

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

不起作用。以下都不是。

echo "$((2#1111101010))" 

我該怎麼辦?

編輯:給出錯誤的預期結果;錯:-220,右:-22。

+0

去掉前導數字,做一些數學。 –

+1

也是,你的例子是否正確?它對我來說不是-220。 –

+0

對不起,我跳過另一個計算1111101010是-22。 – PiEnthusiast

回答

6

也許有一個更簡單的方法,但它只是簡單的數學:

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

-22(你的例子是不正確的)。

+0

我的回答是基於預期的輸出(不是提供的輸入)。你的回答比較好,所以我刪除了我的(並且贊成你的)。 –

+0

1002 - 1024 = -2.2 就是這樣,很簡單。謝謝。 – PiEnthusiast

+0

此外,我應該補充一點,爲了達到我的預期結果,指示位必須保留,否則需要減去512而不是1024。 – PiEnthusiast

相關問題