# Vault 7: Projects

This publication series is about specific projects related to the Vault 7 main publication.

### Protego

# MPLAB XC16 C-Compiler

- 1
- 2
…
- 170
- 171
- 172
- 173
- 174
…
- 365
- 366

MPLAB
®
XC16 C Compiler Users Guide
DS50002071C-page 172  2012-2013 Microchip Technology Inc.
If the result of the subtraction is to be an unsigned quantity, then apply a cast. For
example:
if((unsigned int)(a - b) < 10)
count++;
The comparison is then done using unsigned int, in this case, and the body of the
if() would not be executed.
Another problem that frequently occurs is with the bitwise compliment operator, ~. This
operator toggles each bit within a value. Consider the following code.
unsigned char count, c;
c = 0x55;
if( ~c == 0xAA)
count++;
If c contains the value 0x55, it often assumed that ~c will produce 0xAA, however the
result is 0xFFAA and so the comparison in the above example would fail. The compiler
may be able to issue a mismatched comparison error to this effect in some circum-
stances. Again, a cast could be used to change this behavior.
The consequence of integral promotion as illustrated above is that operations are not
performed with char -type operands, but with int -type operands. However there are
circumstances when the result of an operation is identical regardless of whether the
operands are of type char or int. In these cases, the compiler will not perform the
integral promotion so as to increase the code efficiency. Consider the following exam-
ple.
unsigned char a, b, c;
a = b + c;
Strictly speaking, this statement requires that the values of b and c should be promoted
to unsigned int, the addition performed, the result of the addition cast to the type of
a, and then the assignment can take place. Even if the result of the unsigned int
addition of the promoted values of b and c was different to the result of the unsigned
char addition of these values without promotion, after the unsigned int result was
converted back to unsigned char, the final result would be the same. If an 8-bit addi-
tion is more efficient than a 16-bit addition, the compiler will encode the former.
If, in the above example, the type of a was unsigned int, then integral promotion
would have to be performed to comply with the ANSI C standard.

- 1
- 2
…
- 170
- 171
- 172
- 173
- 174
…
- 365
- 366