dmr@research.UUCP (06/10/83)
decvax!betz wondered about the construction char c; ... (unsigned) c; His example was more complicated but this is the essence. What is supposed to happen is that the character is promoted to int, then cast to unsigned. In other words, the sign extension is not prevented (which is what he wants to accomplish, as portably and cheaply as possible). In other words the v7 and DECUS compilers are wrong. Unfortunately they are not wrong by accident, or at least my compiler isn't. To my shame I put in the construction as a special hack to accomplish essentially the same thing as Betz wanted. (This was before the unsigned char type went in.) In such ways do one's past sins come back to haunt one. If you really want portability to compilers that don't have unsigned char, I'm afraid you'll have to use the explicit mask. At that, it may not be too bad. The 11 code generator would need to generate the mask instruction anyway, and the Vax -O optimizer is smart enough to get rid of it. Dennis Ritchie