Apakah bc mendukung perhitungan hex?

20

Saya mencoba melakukan hexperhitungan langsung dengan bc, saya sudah menentukan skala.

echo 'scale=16;c06b1000-c06a5e78' | bc

Tapi saya masih mendapat nol. Apa yang salah?

bunga aster
sumber
Meskipun secara teknis bukan jawaban untuk pertanyaan Anda, Anda mungkin ingin mempertimbangkan moo (1) alih-alih bc (1).

Jawaban:

33
echo 'ibase=16;C06D1000-C06A5E78' | bc
176520

Perhatikan bahwa hanya hex digit KASUS UPPER yang didukung sebagai angka kecil yang akan bertentangan dengan nama fungsi dan variabel, itulah sebabnya Anda mendapatkan 0 pada contoh Anda ( var1 - var2)

Jika Anda membutuhkan jawaban dalam hex juga, cukup tetapkan obasevariabel:

echo 'obase=16;ibase=16;C06D1000-C06A5E78' | bc
2B188

PS: FYI scaletidak dirancang untuk basis konversi. Dari man bc:

scale defines how some operations use digits after the decimal point.
The default value of scale is 0.
buru-buru
sumber
Jadi jawaban sebenarnya pada 'apa yang bisa salah' adalah bahwa bc hanya mendukung KASUS UPPER untuk digit hex, dengan kredit untuk editor Stephane.
Roland
Perhatikan bahwa penting untuk mengatur obasesebelum Anda mengatur ibase. Jika Anda atur ibaselebih dulu, maka itu mempengaruhi nilai yang diuraikan obasejuga. yaitu ibase = 16; obase = 16;set obaseke 0x16 = 22
Arnavion