ROOT/Handling Data/ROOT Data Types

There are a couple of standard data types like int, float, double, etc. you've probably been using so far. However, despite these universally used names, there is no general agreement, what these types actually mean. In fact, it depends on your machine and compiler, how a data type will actually be stored. For example, some older standards will assign 16 bit to the int type while newer environments will use 32 bit. This might be acceptable for some applications, for data analysis it definitely isn't. As one starts to deal with huge amounts of data, one should be concerned about economic memory usage. This means to chose a data type that is big enough but nothing bigger to hold the intended value with the needed accuracy. To provide this, the programmer must be sure that the chosen data type will actually be the same on any machine the code gets compiled.

To ensure this, a number of machine independent data types that will always have the same definition has been defined in ROOT. It is strongly recommended to use this types when programming ROOT.

Type Description Size
Bool_t logical value (0…false, 1…true) ?
Char_t signed integer value 1 byte
UChar_t unsigned integer value 1 byte
Short_t signed integer value 2 bytes
UShort_t unsigned integer value 2 bytes
Int_t signed integer value 4 bytes
UInt_t unsigned integer value 4 bytes
Long_t signed integer value 8 byte
ULong_t unsigned integer value 8 byte
Float_t floating point value 4 bytes
Double_t floating point value 8 bytes

Table 1: Some of the machine independent data types defined in ROOT. See ref. [1] for all types.