Xref: utzoo comp.lang.c:33431 comp.std.c:3881 Path: utzoo!utgpu!watserv1!watmath!att!ima!ima.isc.com From: karl@ima.isc.com (Karl Heuer) Newsgroups: comp.lang.c,comp.std.c Subject: representation of integers (was: # to the nth power) Message-ID: <5242@ima.ima.isc.com> Date: 5 Nov 90 06:08:57 GMT References: <522@ssp9.idca.tds.philips.nl> <1990Nov2.182217.13958@NCoast.ORG> <1990Nov3.204327.19057@NCoast.ORG> Sender: karl@ima.ima.isc.com Reply-To: karl@ima.isc.com (Karl Heuer) Followup-To: comp.std.c Organization: Interactive Systems Lines: 30 Supersedes: <1990Nov04.212200.4697@dirtydog.ima.isc.com> In article <1990Nov3.204327.19057@NCoast.ORG> catfood@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<