On Thu, 24 May 2007, Mike McCarty wrote:
Matthew Saltzman wrote:
It will definitely print *something*. The question is, can you guarantee
what it will print.
In C89, no in C99, yes.
It's not addressed directly in the FAQ, but I believe it's possible to
prove that (unsigned) -2 must be the two's complement representation of -2
in however many bits make up an int. I know there was some controversy
about that when the standard was being developed. In any case, I don't
know of any modern machine that doesn't represent negative integers in
two's complement.
Reach into your pocket, and pull out your calculator.
Fair enough. I'll concede the point if you can name a standard-conforming
C compiler for my calculator.
H&S note that sign-magnitude and one's complement are permitted, but the
Usenet discussions involved subtle arguments that are long lost to (my)
memory (as is the final conclusion). For most of us programming
modern general-purpose computers, it's a moot point.
H&S also state in an example that
unsigned u;
if ( u > -1 ) ...
will never execute the if block (because -1 is cast to unsigned before the
comparison). But that's not true for sign-magnitude.
[snip]
sizeof(char) == 1 is guaranteed by the standard. There's no reference to
"bytes", but it is commonly accepted that the char type is a byte.
Erm, from the Standard:
3.4
[#1] byte
addressable unit of data storage large enough to hold any
member of the basic character set of the execution
environment
OK that was from memory (and at 3am, to boot). From H&S, a "byte" or
"storage unit" is as above, essentially, the smallest independently
addressible block of storage. The char type has a size of one byte. (As I
recall, whether a standard-conforming compiler could be written for a
word-addressible machine was also a subject of language-lawyer debates on
Usenet.)
It's possible to have chars that are not eight bits, but I can't think of a
modern machine that does that. There were some old machines (Honeywells?)
that had six-bit bytes and 36-bit words.
All this is based on my recollection of discussions in comp.lang.c and
comp.std.c when the standard was under development.
Mike
--
Matthew Saltzman
Clemson University Math Sciences
mjs AT clemson DOT edu
http://www.math.clemson.edu/~mjs