Discussion:
obliczenia szesnastkowe w bashu
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
glappo
2005-03-13 10:36:04 UTC
Permalink
jak przeprowadzic obliczenia w bashu w systemie szesnastkowym?
w systemie dziesietnym jest to proste, wystaczy:

#!/bin/bash
liczba1=5
liczba2=6
let wynik=liczba1*liczba2
echo $wynik

a jak zadklarowac owe liczby jako szesnastkowe?
Hoppke
2005-03-13 11:28:15 UTC
Permalink
Post by glappo
a jak zadklarowac owe liczby jako szesnastkowe?
Bash ma tylko bardzo prostą arytmetykę. Jeśli chcesz coś poważniejszego
w skryptach policzyć, to użyj "bc".
--
.°.°.°.°.°.°.: http://dobremiasto.net/~hoppke/ :.°.°.°.°.°.°.
Grzegorz Stanczyk
2005-03-13 17:23:42 UTC
Permalink
Post by Hoppke
Post by glappo
a jak zadklarowac owe liczby jako szesnastkowe?
Bash ma tylko bardzo prostą arytmetykę. Jeśli chcesz coś poważniejszego
w skryptach policzyć, to użyj "bc".
Jesteś tego pewien ?
--
[ Grzegorz Stańczyk aka gRzEnIu ]
[ * Linux #382872 registered user * ]
[ _if technology is the answer _o/ ]
[ what was the question ? _|_ ]
Hoppke
2005-03-13 17:55:33 UTC
Permalink
Post by Grzegorz Stanczyk
Post by Hoppke
Post by glappo
a jak zadklarowac owe liczby jako szesnastkowe?
Bash ma tylko bardzo prostą arytmetykę. Jeśli chcesz coś poważniejszego
w skryptach policzyć, to użyj "bc".
Jesteś tego pewien ?
Że bash ma bardzo prostą arytmetykę i że jeśli chce się coś poważniejszego
w skryptach policzyć należy użyć "bc"?

Tak, mam pewność. Oczywiście bc nie jest jedynym wyborem, można też
posiłkować się językami niekoniecznie stricte "matematycznymi" (np. perlem).

Ale ja bym proponował bc, bo jest względnie lekkie, nie obciąża za bardzo
skryptów, jest rozpowszechnione w światku uniksowatych i potrafi sporo
rzeczy policzyć. Warto wykorzystać okazję by się z nim zapoznać, bo potem
nie-wiadomo-kiedy się może przydać.

A jeśli pytasz o ograniczenia basha, to niech posłuży tu cytat z jego
dokumentacji: "Evaluation is done in fixed-width integers with no check for
overflow". Czyli: małe zmienne, przekręcające się po cichu zakresy, brak
wsparcia dla zmiennoprzecinkowych... cud, że w ogóle wychwytuje "dzielenie
przez zero". No ale bash to tylko shell. Miło, że ma wbudowaną prościutką
arytmetykę, przydaje się np. do numerowania plików w pętlach i sumowaniu
prostych rzeczy. Ale jeśli chcesz zrobić coś poważniejszego (np. poużywać
ułamków), to warto się przerzucić na bc.
--
.°.°.°.°.°.°.: http://dobremiasto.net/~hoppke/ :.°.°.°.°.°.°.
Grzegorz Stanczyk
2005-03-13 12:29:33 UTC
Permalink
Post by glappo
jak przeprowadzic obliczenia w bashu w systemie szesnastkowym?
#!/bin/bash
liczba1=5
liczba2=6
let wynik=liczba1*liczba2
echo $wynik
a jak zadklarowac owe liczby jako szesnastkowe?
#!/bin/bash
typeset -i liczba1=16#05
#lub liczba1=0x5
typeset -i liczba2=16#06
#lub liczba2=0x6
(( wynik = liczba1 * liczba2 ))
echo $wynik

Tylko (!) Bash używa dwóch składni: podstawa#liczba lub tej znanej chociażby z C
gdzie w przypadku liczb szestnastkowych 0x poprzedza liczbę.
--
[ Grzegorz Stańczyk aka gRzEnIu ]
[ * Linux #382872 registered user * ]
[ _if technology is the answer _o/ ]
[ what was the question ? _|_ ]
Bartosz Feński aka fEnIo
2005-03-13 17:49:36 UTC
Permalink
Post by glappo
Post by glappo
jak przeprowadzic obliczenia w bashu w systemie szesnastkowym?
#!/bin/bash
liczba1=5
liczba2=6
let wynik=liczba1*liczba2
echo $wynik
a jak zadklarowac owe liczby jako szesnastkowe?
#!/bin/bash
typeset -i liczba1=16#05
#lub liczba1=0x5
typeset -i liczba2=16#06
#lub liczba2=0x6
(( wynik = liczba1 * liczba2 ))
echo $wynik
Tylko (!) Bash używa dwóch składni: podstawa#liczba lub tej znanej
chociażby z C gdzie w przypadku liczb szestnastkowych 0x poprzedza liczbę.
Powyższe zwraca 30, czyli bzdury.

pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:***@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - w. malopolskie - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://skawina.eu.org | jid:***@jabber.org | rlu:172001
MoonWolf
2005-03-13 18:04:24 UTC
Permalink
Post by Bartosz Feński aka fEnIo
Powyższe zwraca 30, czyli bzdury.
Bo zwraca w dziesiętnym (:)
--
Over And Out <:> MoonWolf, [Dark Followers] Dark Follower
<:> http://karakkhaz.prv.pl (::) (::) ***@polbox.com (:)
No need to forgive
Grzegorz Stanczyk
2005-03-13 18:37:43 UTC
Permalink
Post by MoonWolf
Post by Bartosz Feński aka fEnIo
Powyższe zwraca 30, czyli bzdury.
Bo zwraca w dziesiętnym (:)
Właśnie :>
--
[ Grzegorz Stańczyk aka gRzEnIu ]
[ * Linux #382872 registered user * ]
[ _if technology is the answer _o/ ]
[ what was the question ? _|_ ]
Bartosz Feński aka fEnIo
2005-03-13 18:55:15 UTC
Permalink
Post by Grzegorz Stanczyk
Post by MoonWolf
Post by Bartosz Feński aka fEnIo
Powyższe zwraca 30, czyli bzdury.
Bo zwraca w dziesiętnym (:)
Właśnie :>
To trzeba było dodać, że należy użyć printf do wyświetlania ;)

pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:***@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - w. malopolskie - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://skawina.eu.org | jid:***@jabber.org | rlu:172001
glappo
2005-03-13 20:06:58 UTC
Permalink
dzieki za pomoc, uzylem bc, a jako ze wystarczylo tylko pokazac wynic w
szesnastkowym to:
echo 'obase=16; ibase=10; 'jakas_liczba'| bc
Bartosz Feński aka fEnIo
2005-03-13 20:19:38 UTC
Permalink
Post by glappo
dzieki za pomoc, uzylem bc, a jako ze wystarczylo tylko pokazac wynic w
echo 'obase=16; ibase=10; 'jakas_liczba'| bc
To czemu nie użyjesz printf?

pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:***@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - w. malopolskie - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://skawina.eu.org | jid:***@jabber.org | rlu:172001
Robert
2005-03-14 08:16:43 UTC
Permalink
Post by Bartosz Feński aka fEnIo
Post by glappo
dzieki za pomoc, uzylem bc, a jako ze wystarczylo tylko pokazac wynic w
echo 'obase=16; ibase=10; 'jakas_liczba'| bc
To czemu nie użyjesz printf?
zapis "printf $wynik" tez zwraca wartosc dziesietna...
Kacper Perschke
2005-03-14 08:48:21 UTC
Permalink
Post by Robert
Post by Bartosz Feński aka fEnIo
Post by glappo
dzieki za pomoc, uzylem bc, a jako ze wystarczylo tylko pokazac wynic w
[...]
To czemu nie użyjesz printf?
zapis "printf $wynik" tez zwraca wartosc dziesietna...
A 'man 1 printf' to kolega testował?

Chciałeś użyć bc - twoja wola.
Ale takiego lenistwa jak twoje nie znoszę.

KAcper
--
Jeśli chcesz znać maila do mnie szukaj nagłówka "Organization".
Loading...