Czy BC obsługuje obliczenia szesnastkowe?


20

Próbuję wykonać hexobliczenia bezpośrednio bc, już podałem skalę.

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

Ale wciąż dostaję zero. Co może być nie tak?


Chociaż technicznie nie jest to odpowiedź na twoje pytanie, możesz rozważyć moo (1) zamiast bc (1).

Odpowiedzi:


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

Zauważ, że obsługiwane są tylko cyfry szesnastkowe WIELKIE LICZBY, ponieważ małe litery kolidowałyby z nazwami funkcji i zmiennych, dlatego w twoim przykładzie masz 0 ( var1 - var2)

Jeśli potrzebujesz również odpowiedzi w formacie szesnastkowym, po prostu ustaw obasezmienną:

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

PS: FYI scalenie jest przeznaczony do bazy konwersji. Od man bc:

scale defines how some operations use digits after the decimal point.
The default value of scale is 0.

Tak więc prawdziwą odpowiedzią na „co może być nie tak” jest to, że bc obsługuje tylko UPPER CASE dla cyfr szesnastkowych, z podziękowaniami dla redaktora Stephane'a.
Roland

Pamiętaj, że ważne jest, aby ustawić obaseprzed ustawieniem ibase. Jeśli ustawisz jako ibasepierwszy, wpłynie to również na analizowaną wartość obase. tzn. ibase = 16; obase = 16;ustawia obasena 0x16 = 22
Arnavion
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.