我有10位帶符號的二進制數字。我知道兩種shell/bash方式將它們轉換爲小數,但無法識別簽名。將帶符號的10位二進制數轉換爲小數?
1111101010應轉換爲-22,而不是1002
echo "ibase=2;obase=A;1111101010"| bc
不起作用。以下都不是。
echo "$((2#1111101010))"
我該怎麼辦?
編輯:給出錯誤的預期結果;錯:-220,右:-22。
我有10位帶符號的二進制數字。我知道兩種shell/bash方式將它們轉換爲小數,但無法識別簽名。將帶符號的10位二進制數轉換爲小數?
1111101010應轉換爲-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(你的例子是不正確的)。
我的回答是基於預期的輸出(不是提供的輸入)。你的回答比較好,所以我刪除了我的(並且贊成你的)。 –
1002 - 1024 = -2.2 就是這樣,很簡單。謝謝。 – PiEnthusiast
此外,我應該補充一點,爲了達到我的預期結果,指示位必須保留,否則需要減去512而不是1024。 – PiEnthusiast
去掉前導數字,做一些數學。 –
也是,你的例子是否正確?它對我來說不是-220。 –
對不起,我跳過另一個計算1111101010是-22。 – PiEnthusiast