You cannot assign a value stored in a byte variable to a char variable since byte is a signed data type whereas char is an unsigned data type.
byte b1 = 10; char c1 = 'A'; // byte and char b1 = c1; // An error b1 = (byte)c1; // Ok c1 = b1; // An error c1 = (char)b1; // Ok
short s1 = 15; char c1 = 'A'; // short and char s1 = c1; // An error s1 = (short)c1; // Ok c1 = s1; // An error c1 = (char)s1; // Ok
int num1 = 150; char c1 = 'A'; // int and char num1 = c1; // Ok num1 = (int)c1; // Ok. But, cast is not required. Use num1 = c1 c1 = num1; // An error c1 = (char)num1; // Ok c1 = 255; // Ok. 255 is in the range of 0-65535 c1 = 90000; // An error. 90000 is out of range 0-65535 c1 = (char)90000; // Ok. But, will lose the original value
char c1 = 'A'; long num2 = 20L; // long and char num2 = c1; // Ok num2 = (long)c1; // Ok. But, cast is not required. Use num2 = c1 c1 = num2; // An error c1 = (char)num2; // Ok c1 = 255L; // An error. 255L is a long literal c1 = (char)255L; // Ok. But use c1 = 255 instead