On 23 November 2015 at 12:17, Brantley Coile <brantleycoile@me.com> wrote:
I've lived with the old definition so long that I didn't notice Plan 9's definition, which is not a problem on today's architectures because there are two equally efficient instructions to choose from. 

There are a few things in C's definition where things aren't specified as portably as they might now be,
because they just turned out to be different on different platforms, especially once there were several compiler implementations.
An early example of the former is "bit fields", which are such a mess that Plan 9 code never uses them. An example of the latter was the
long argument between "value preserving" and "unsigned preserving" for choosing the type when unsigned values met signed ones.
"Unsigned preserving" is trivial, and at least easy to understand. ANSI went for "value preserving" (even though it doesn't really
preserve values, except in the sense of formaldehyde) and the rules are surprisingly elaborate.