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

Re: [MiNT] Highwire edit

Helmut Karlowski wrote:

    unsigned short    nkey;
    unsigned char    ascii_code;

ascii_code = nkey & 0x00FF;

But if the target (ascii_code) is 8 bit wide (char) there is no difference I know of.

You are totally right.
Converting an integer type to a smaller integer type removes the highest bits,
so the "bitwise and" is redundant.

The three following lines are strictly equivalent.
ascii_code = nkey & 0x00FF;
ascii_code = nkey;
ascii_code = (unsigned char)nkey;

In the 2 first forms, there is an implicit conversion from unsigned short to unsigned char,
some compilers may issue a warning because of the possible loss of data (if nkey is >= 256)
So the the third form with an explicit cast is the better: the programmer shows explicitly
what he wants, and no compiler will produce a warning.

I have just tested this with the brand new GCC 4.4.1.
In any case, the result is a single "move.b" instruction,
it couldn't be more simple.

Vincent Rivière