ABL electronic PIC Microcontrollers PIC18 User Manual

Page of 312
Arithmetic Conversions
When you use an arithmetic expression, such as 
a+b
, where 
a
and 
b
are of differ-
ent arithmetic types, mikroC performs implicit type conversions before the expres-
sion is evaluated. These standard conversions include promotions of “lower” types
to “higher” types in the interests of accuracy and consistency.
Assigning a signed character object (such as a variable) to an integral object
results in automatic sign extension. Objects of type 
signed char
always use
sign extension; objects of type 
unsigned char
always set the high byte to zero
when converted to 
int
.
Converting a longer integral type to a shorter type truncates the higher order bits
and leaves low-order bits unchanged. Converting a shorter integral type to a longer
type either sign-extends or zero-fills the extra bits of the new value, depending on
whether the shorter type is signed or unsigned, respectively.
Note: Conversion of floating point data into integral value (in assignments or via
explicit typecast) produces correct results only if the 
float
value does not exceed
the scope of destination integral type.
First, any small integral types are converted according to the following rules:
1. 
char
converts to 
int
2. 
signed char
converts to 
int
, with the same value
3. 
short
converts to 
int
, with the same value, sign-extended
4. 
unsigned short
converts to unsigned int, with the same value, zero-filled
5. 
enum
converts to 
int
, with the same value
After this, any two values associated with an operator are either 
int
(including
the 
long
and 
unsigned
modifiers), or they are float (equivalent with 
double
and 
long double
in mikroC).
1. If either operand is 
float
, the other operand is converted to 
float
2. Otherwise, if either operand is 
unsigned long
, the other operand is converted 
to 
unsigned long
3. Otherwise, if either operand is 
long
, the other operand is converted to 
long
4. Otherwise, if either operand is 
unsigned
, the other operand is converted to
u
nsigned
5. Otherwise, both operands are 
int
MikroElektronika:  Development  tools  -  Books  -  Compilers
83
page
mikroC - C Compiler for Microchip PIC microcontrollers
mikroC
making it simple...