Re: OT: Requesting C advice

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Current Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]     [Fedora Docs]

  Powered by Linux