Целые числа являются значениями типа "int". Когда вы назначаете целочисленное значение для short или char, используя оператор "=", значение int будет преобразовано в short или char. Компилятор может обнаружить это преобразование и выполнить оптимизацию для преобразования целочисленного значения во время компиляции.
short a = 50; //50 is an int, it will be implicitly converted to short. The compiler may convert 50 to short on compile time.
int b = 60;
short c = b; //the value of b will be converted to short and assigned to c.
short d = b + 70; //b + 70 is a sum of ints and the result will be an int that will be converted to short.
int8_t и uint16_t не являются стандартными типами. Много раз эти типы могут быть определены как что-то вроде:
typedef char int8_t;
typedef unsigned short uint16_t;