The char type takes 1 byte of memory (8 bits) and allows expressing in the binary notation 2^8=256 values. The char type can contain both positive and negative values. The range of values is from -128 to 127
The uchar integer type also occupies 1 byte of memory, as well as the char type, but unlike it uchar is intended only for positive values. The minimum value is zero, the maximum value is 255. The first letter u in the name of the uchar type is the abbreviation for unsigned.
The size of the short type is 2 bytes (16 bits) and, accordingly, it allows expressing the range of values equal to 2 to the power 16: 2^16 = 65 536. Since the short type is a sign one, and contains both positive and negative values, the range of values is between -32 768 and 32 767.
The unsigned short type is the type ushort, which also has a size of 2 bytes. The minimum value is 0, the maximum value is 65 535.
The size of the int type is 4 bytes (32 bits). The minimal value is -2 147 483 648, the maximal one is 2 147 483 647.
The unsigned integer type is uint.
It takes 4 bytes of memory and allows expressing integers from 0 to 4 294 967 295.
The size of the long type is 8 bytes (64 bits). The minimum value is -9 223 372 036 854 775 808, the maximum value is 9 223 372 036
The ulong type also occupies 8 bytes and can store values from 0 to 18 446 744 073 709 551 615.
From the above description of the various data types, the unsigned integer types are not designed for storing negative values. Any attempt to set a negative value can lead to unexpected errors.