The casting logic is very simple. For Char the maximum value that you can put is 65536. So if u cast 78890 to assign to Char it will go to 0 (LIKE CYCLIC after completing one cycle of 65536) and assign 13354 since 78890-65536=13354.
Similarly if u assign char c=(char)-100, it is equivalent to 65536-100=65436. This is the casting logic that takes place for 'char'. For int,byte, etc...also it is the same except that after completing a cycle it will go to the -Ve minimum.