Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10 5/3/83; site bbncca.ARPA Path: utzoo!linus!bbncca!keesan From: keesan@bbncca.ARPA (Morris Keesan) Newsgroups: net.unix-wizards,net.lang.c Subject: Re: unsigned char -> unsigned int conversion Message-ID: <778@bbncca.ARPA> Date: Tue, 12-Jun-84 10:20:27 EDT Article-I.D.: bbncca.778 Posted: Tue Jun 12 10:20:27 1984 Date-Received: Wed, 13-Jun-84 04:48:03 EDT References: <183@haddock.UUCP> Organization: Bolt, Beranek and Newman, Cambridge, Ma. Lines: 30 ------------------------------ haddock!lee says, > Note that "char" is part of the sequence char-short-int-long, whereas > "unsigned char" is part of the sequence uchar-ushort-uint-ulong, where the > second sequence has the property "unsigned". During coercions, unsigned > chars are extended to unsigned whereas chars are extended to int (by zero > extension or sign extension, whichever is appropriate). What are you using as a reference? Clearly not Kernighan & Ritchie, since unsigned chars weren't invented as of publication. The only reference I have to unsigned chars is "The C Programming Language" in the System V "Programming Guide", and it doesn't allow unsigned short or unsigned long. Is this a Berkeleyism? What does the current draft ANSI standard say about it? In upgrading our local C compiler to be System V compatible, I blithely assumed that since our chars are unsigned, all I had to do was the syntactic magic to make "unsigned char" equivalent to "char". A careful reading of the System V C manual leaves the question up in the air. Their section on the usual arithmetic conversions omits any mention of unsigned char (an obvious oversight). Would somebody with a Bell Labs System V C compiler try Lee's unsigned char foo=1; if( (-1|foo) > 0 ) printf("-1 is negative\n"); and report what it does? Thanks. -- Morris M. Keesan {decvax,linus,wjh12,ima}!bbncca!keesan keesan @ BBN-UNIX.ARPA