Результат присваивания должен быть предсказуемым:
3.9.1
4 Целые числа без знака, объявленные как без знака, должны подчиняться законам арифметики по модулю 2 n , где n - число битов в представлении значения этого конкретного размера целого числа.17)
17) Это означает, что арифметика без знака не переполняется, поскольку результат, который не может быть представлен результирующим целочисленным типом без знака, уменьшается по модулю на число, которое на единицу больше наибольшего значения, которое может быть представлено результирующим целочисленным типом без знака.
Кроме того, sizeof (char) определяется как 1, а sizeof (unsigned char) = sizeof (char), поэтому вы должны видеть один и тот же результат независимо от реализации (при условии, что у вас нет байтов со смешными размерами, кроме 8).
Однако, предупреждение говорит вам, что результат, вероятно, не соответствует вашим ожиданиям (например, возможно, вы переоценили размер неподписанного типа?). Если это то, что вы намеревались, почему бы не написать 300 % (1 << CHAR_BIT)
(при условии, что 300 для вас как-то важно)?