Whats the most effective int on a 8-Bit Microcontroller?
The C and C++ standards (You didn't state which you use) have a number of requirements on the ranges that char, short, int, long and long long (in signed and unsigned variant) can represent. But these requirements leave a lot of options open, the exact mapping from those standard types to hardware types is compiler-dependent (and sometimes also on versions, command-line flags, etc.)

When programming for small embedded systems the use of these 'raw' types is not recommended because the relation to the size is complex. Better specify what you need and let the compiler/library decide how to handle that best.

When you need a specific size (for instance to match the memory layout of a message or a set of hardware registers, or - for unsigned only - you need modulo arithmetic) use the fixed size types: int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t. It is possible that one of these types doesn't exist and you get a compiler error, but as you need the exact type that is for the best.

When you need a variable for calculation choose the smalles type that can handle your range, but allow the compiler to choose a larger type: int_fast8_t, uint_fast8_t, etc. This gives the best of both worlds: on an AVR, int_fast8_t will be a byte, but on a Cortex (where handling 8-bit arithmetic would be slower and use more instructions) it would be 32 bits. On your desktop it might be 64 bit, if the CPU can handle that faster.

When you want tos tore integer values, and you want to use as little space as possible, use one of the int_leastN_t/uint_leastN_t types. The compiler will choose the smallest type that can store at least the bist you specified.

And PS: use char only for ASCII. Even when you use the raw types (you shouldn't, but even then), don't use char as a small integer, because you never know whether it is signed or unsigned. And vice versa, don't use one of those *_t types if you want to store an ACII value, that is what char is for.

So IMO all built-in ints should be deprecated, except for char (which shouln't have been an int in the first place).