On Aug 31, 2015, at 11:54 AM, Mike - st257 <silvertip...@gmail.com> wrote:
> 
> define stanzas don't
> replicate the behavior as seen when used via piping or interactively. :-/

Again, it comes down to order of evaluation.  You can look at the following in 
three stages:

   define bin_to_hex(b) { obase=16; ibase=2; return b; }
   bin_to_hex(10101011)

1. Here is a number, 10101011, which you shall interpret in base 10, since 
that’s the default and no one has said otherwise yet.

2. Pass that value to bin_to_hex()

3. Change the obase and ibase, then return the parameter with those new 
settings.

You are expecting that because the define line appears first that it affects 
what follows, but it doesn’t affect anything until you call it for the first 
time.

That’s clear.

What I *don’t* understand is why this doesn’t work:

   define bin_to_hex(b) { obase=16; ibase=2; return b; }
   bin_to_hex(0)    /* bogus call to force obase and ibase */
   bin_to_hex(10101011)

For some strange reason, I get 20100 out of this with both GNU and BSD bc, even 
though ibase=2 and obase=10 by the time of the second bin_to_hex() call.

(If you’re confused about obase=10, realize that 10-base-16 is 16-base-10. :) )

Bottom line, don’t use bc for this kind of thing.  It’s not the right tool for 
the job.
_______________________________________________
CentOS mailing list
CentOS@centos.org
https://lists.centos.org/mailman/listinfo/centos

Reply via email to