Frequently Asked Questions

How does the compiler handle converting between bytes and words?

In an assignment such as:

bytevar = wordvar;

The most significant BYTE is lost. This is the same result as:

bytevar = wordvar & 0xff;

The following will yield just the most significant BYTE: For Example:

bytevar = wordvar >> 8;

Any arithmetic or relational expression involving both bytes and words will perform word operations, and treat the bytes as words with the top byte 0. For example:

wordvar= 0x1234; 
bytevar= 0x34; 
if(wordvar==bytevar) //will be FALSE

Any arithmetic operations that only involve bytes will yield a byte result even when assigned to word.

bytevar1 = 0x80;
bytevar2 = 0x04;
wordvar = bytevar1 * bytevar2; //wordvar will be 0

However, typecasting may be used to force word arithmetic:

wordvar = (long) bytevar1 * (long) bytevar2; //wordvar will be 0x200

C-Aware IDE Demo
Embedded C Learners Kit
EZ App Lynx