I'm happy to report that HP doesn't have anything equivalent to

the 28 series among its current offerings.

Quote:

I formerly owned a 28C back in the 1980s. I dearly miss its very

complete binary/octal/hexadecimal numerals. I have never found a

comparable feature set for nondecimal bases.

"Binary integers" also have a decimal base representation in these

calculators. Actually, they're all stored the same and treated the

same for arithmetic operations, and only displayed differently

depending on the base.

Starting with the 28S, binary integers are displayed with a

trailing h, d, o, or b to indicate the base. You can enter a

binary integer in something other than the current base by

including a trailing h, d, o, or b.

All 48 and 49 series can do everything that the 28 series can with

"binary integers"; possibly even a few more things, for all I

know.

The 16C seems to have better built-in capabilities for binary

integers. Maybe there's an emulator of the 16C available for the

48 or 49 series?

Quote:

Do any of HP's current calculators have the following

capabilities:
1) binary/octal/hexadecimal fractional numerals to the right of

the radix point;

Like Luiz, as far as I know, no HP calculator has ever had this

built-in. Maybe think of it as sort of like a slide rule, where

it's up to the user to keep track of where the decimal point has

to be.

Just sort of thinking out loud here, maybe you could treat a

fractional number as an integer and a divisor; for example,

#ABC.DEFh could be treated as #ABCDEFh/(#10h^#3h), although RPL

doesn't allow raising a binary integer to a power. Maybe store

that in a list as { #ABCDEFh #3h }, where the second element is

understood to be the number of places to move the radix point to

the left.

For displaying hexadecimal numbers with a fractional part, I

suppose that you'd have to either display it as a character string

or as two separate numbers (perhaps within a list). Much the same

would apply to a decimal, octal, and binary representation with

over twelve digits.

The 49 series adds a new object type, the "exact integer", a

decimal integer with the length limited only by available memory.

As long as the calculator is in "exact" mode and you don't involve

the exact integers in any operation with "real" numbers, or force

them to reals with, for example, I\->R or \->NUM, they stay exact.

For example, the sequence:

12 10 / returns '6/5' instead of 1.2.

Binary integers can be converted to exact integers with the

sequence B\->R R\->I, but converting through real numbers limits

exact conversions to 12 significant decimal digits, so that's good

only for integers #E8D4A50FFFh and less. Exact integers can be

converted to binary integers with R\->B, although I don't know the

limit of the accuracy with that. Too bad that they didn't provide

UserRPL B\->I and I\->B commands.

For a binary integer to exact integer conversion with 64-bit

accuracy, you could use a string as an intermediate object

instead; for example:

%%HP: T(3)F(.); @ ASCII transfer header.

\<< @ Begin program.

PUSH @ Save flags and path.

DEC @ Force decimal representation.

\->STR @ Convert binary integer to string.

3. OVER SIZE 1. - SUB @ Extract digits.

STR\-> @ Convert string to exact integer

POP @ Restore flags and path.

\>> @ End program.

Note that the above doesn't force an object to the current

wordsize. If you also want that, first do a unity operation such

as adding or subracting 0, or multiplying or dividing by 1.

Converting an exact integer to a binary integer with 64-bit

accuracy is even easier:

%%HP: T(3)F(.); @ ASCII transfer header.

\<< @ Begin program.

"#" SWAP + @ Prepend binary integer delimiter.

"d" + @ Append decimal base indicator.

STR\-> @ Convert string to binary integer.

\>> @ End program.

Again, this doesn't force the binary integer to the current

wordsize (although it will be displayed that way). You can force

that by doing a unity operation after the conversion.

I don't know, but maybe using exact integers could be helpful.

Quote:

2) binary/octal/hexadecimal numerals larger than 32 bits;

All 28, 48, and 49 series can have the wordsize for binary integer

operations set from 1 through 64 bits. But note that user binary

integers are always stored (and recalled) as 64-hit numbers. The

display depends on the current wordsize and HEX/DEC/OCT/BIN

display mode. Any arithmetic, logic, shift, or rotate operation on

a binary number forces any bits more significant than specified by

the wordsize to zero.

Quote:

3) negative-to-twos-complement-viewed-as-unsigned presentation

(the equivalent in C language of: printf("%x",-37) that presents

ffffffdb in hexadecimal);

I don't follow that, but the two's complement of a binary integer

is returned by pressing the [+/-] key to invoke the NEG command.

Of course the NOT command gives you the one's complement. I expect

that you can figure out how to do what you want here. Remember to

use the appropriate wordsize.

I recall doing byte-wise big-endian / little-endian conversions on

the 48SX by using strings too. These kinds of things aren't all

that difficult to program, even though they're not built-in.

Quote:

4) setting word width for modulo arithmetic (e.g., 8-bit, 16-bit,

32-bit)?

See my response to your number 2 question.

Also, do some searches at http://www.hpcalc.org/ and

http://groups.google.com/group/comp.sys.hp48.

Regards,

James