# Vault 7: Projects

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

### Protego

# MPLAB XC16 C-Compiler

- 1
- 2
…
- 114
- 115
- 116
- 117
- 118
…
- 365
- 366

MPLAB
®
XC16 C Compiler Users Guide
DS50002071C-page 116  2012-2013 Microchip Technology Inc.
8.3 INTEGER DATA TYPES
Table 8-1 shows integer data types that are supported in the compiler. All unspecified
or signed integer data types are arithmetic type signed integer. All unsigned integer
data types are arithmetic type unsigned integer.
There is no type for storing single bit quantities.
All integer values are specified in little endian format, which means:
 The least significant byte (LSB) is stored at the lowest address
 The least significant bit (LSb) is stored at the lowest-numbered bit position
As an example, the long value of 0x12345678 is stored at address 0x100 as follows:
As another example, the long value of 0x12345678 is stored in registers w4 and w5:
Signed values are stored as a twos complement integer value.
Preprocessor macros that specify integer minimum and maximum values are available
after including <limits.h> in your source code, located by default in:
<install directory>\include
As the size of data types is not fully specified by the ANSI Standard, these macros allow
for more portable code which can check the limits of the range of values held by the
type on this implementation.
For information on implementation-defined behavior of integers, see
Section A.6 Integers.
8.3.1 Double-Word Integers
The compiler supports data types for integers that are twice as long as long int.
Simply write long long int for a signed integer, or unsigned long long int
for an unsigned integer. To make an integer constant of type long long int, add the
suffix LL to the integer. To make an integer constant of type unsigned long long
int, add the suffix ULL to the integer.
You can use these types in arithmetic like any other integer types.
TABLE 8-1: INTEGER DATA TYPES
Type Bits Min Max
char, signed char 8 -128 127
unsigned char 8 0 255
short, signed short 16 -32768 32767
unsigned short 16 0 65535
int, signed int 16 -32768 32767
unsigned int 16 0 65535
long, signed long 32 -2
31
2
31
- 1
unsigned long 32 0 2
32
- 1
long long*, signed long long* 64 -2
63
2
63
- 1
unsigned long long* 64 0 2
64
- 1
* ANSI-89 extension
0x100 0x101 0x102 0X103
0x78 0x56 0x34 0x12
w4 w5
0x5678 0x1234

- 1
- 2
…
- 114
- 115
- 116
- 117
- 118
…
- 365
- 366