Что действительно происходит, зависит от реализации компилятора. Что должно произойти, так это 8-битное деление на 8-битное и преобразование результата в int (16-битное или 32-битное, это зависит от целевой архитектуры и компилятора).
Поскольку CPU обычно не имеет инструкций для 8-битного деления компилятор может интерпретировать это как:
res = (int) (char) ((int) a / (int) b)
Тип char обычно должен быть 8 битовое целое число со знаком, на самом деле компилятор может оптимизировать это до:
res = (int) a / (int) b
Вы не знаете наверняка, если не заглянете в ассемблер вывод.