representation of integers (was: # to the nth power)

Karl Heuer karl at ima.isc.com
Mon Nov 5 17:08:47 AEST 1990


In article <1990Nov3.204327.19057 at NCoast.ORG> catfood at NCoast.ORG (Mark W. Schumann) writes:
>You are simply not allowed to assume *anything* about the internal
>representation of integers if your programs are to be 100% portable ANSI.

Actually, the Standard guarantees that bitstrings with the sign bit clear
will have the obvious interpretation as a nonnegative integer.  When the sign
bit is set things get a bit murkier: apparently the Committee intended that
two's complement, one's complement, and sign-magnitude representations are all
legal.

The relevant rule says something about "strict binary except for the sign
bit".  One interpretation would be that this says nothing at all when the sign
bit is set, and so you could have something silly like normal binary for
positives and Gray code for negatives.

Alternately, it could mean that a bitstring b where b&HIBIT is set has the
value M*(b&~HIBIT)+A for some constants M and A.  This, together with the
required limit values (short int must include the range [-32767,+32767], etc.)
would imply that the only legal representations are the above three and a
skewed sign-magnitude (M=-1, A=-1).

A related issue is the question of whether it's required for U{type}_MAX+1 to
be a power of two, and if so, whether it must be 1<<sizeof(type)*CHAR_BIT
(false on some Cray machines, I'm told).

These are on my list of questions to send X3J11 for interpretation someday.
If somebody else gets around to it first, that's fine.

Karl W. Z. Heuer (karl at ima.isc.com or uunet!ima!karl), The Walking Lint
Followups to comp.std.c.



More information about the Comp.lang.c mailing list