Languages/C/inttypes

(Difference between revisions)
Jump to: navigation, search
m
Line 13: Line 13:
 
{|class=wikitable
 
{|class=wikitable
 
|-
 
|-
| C99 type || (Old) HEVs type || size (bits) || minimum value (define) || minimum value (numeric) || maximum value (define) || maximum value (numeric)
+
! C99 type || (Old) HEVs type || size (bits) || minimum value (define) || minimum value (numeric) || maximum value (define) || maximum value (numeric)
 
|-
 
|-
 
| uint8_t  || UINT8        || 8          || -                      || 0                      || UINT8_MAX              || 255
 
| uint8_t  || UINT8        || 8          || -                      || 0                      || UINT8_MAX              || 255

Revision as of 13:54, 12 February 2013

Contents

Integer types in C (and C++)

The C language defines a lot of integer types (char, short, int, unsigned int, long, long long,...) but unfortunately their size are implementation dependent (vendor/platform/compiler).

Writing programs in a portable manner requires the use of known size integers.

C99 integer sizes

Recent compilers provide the <stdint.h> file that defines a lot of integer types, and because this is a standard, new code should no more use the "old" HEVs coding style.

C99 type (Old) HEVs type size (bits) minimum value (define) minimum value (numeric) maximum value (define) maximum value (numeric)
uint8_t UINT8 8 - 0 UINT8_MAX 255
uint16_t UINT16 16 - 0 UINT16_MAX 65'535
uint32_t UINT32 32 - 0 UINT32_MAX 4'294'967'295
uint64_t UINT64 64 - 0 UINT64_MAX 18'446'744'073'709'551'615
int8_t INT8 8 INT8_MIN -128 UINT8_MAX 127
int16_t INT16 16 INT16_MIN -3'2768 UINT16_MAX 32'767
int32_t INT32 32 INT32_MIN -2'147'483'648 UINT32_MAX 2'147'483'647
int64_t INT64 64 INT64_MIN -9'223'372'036'854'775'807 UINT64_MAX 9'223'372'036'854'775'807

C++ support

C++ users should use <stdint.h> C++11 will introduce the <cstdint> header.

Compiler support & remarks

GCC

gcc fully supports <stdint.h>.

HI TECH PIC18 C compiler

Since version 9.65, this compiler supports <stdint.h>, without the (u)int64_t.

Microchip XC8 compiler

This compiler has the <sdtint.h> file. Since version 9.65, this compiler supports <stdint.h>, without the (u)int64_t.

IAR - MSP430

This compiler supports <stdint.h>.

Microsoft Visual C++

Here is a suitable stdint.h file.

Bit shift operators and signed integers

What is the value of ((int32_t)-1) >> 1 and ((int32_t)-1) << 1 ? -> The result is implementation dependent.

Conclusion : Don't use shift operators on signed integers!

Personal tools
Namespaces
Variants
Actions
Navigation
Browse
Toolbox