unsigned char m=0;
unsigned char s=0;
unsigned long t=0;
t=36000;
h=(t/3600);
m=((t-(h*3600U))/60U);//Вычисление минут
s=((t-(h*3600U))-(m*60U));
То есть
(h)char = (long/int);
(m)char = (long - (char * int))/int);
(s)=((t-(char*int))-((char*int));
К сожалению не понимаю, в каком порядке что во что преобразуется.
Видимо, где-то переполнится один из char. Хотя, с другой стороны, проблему решили U около констант. Значит, проблема была в переполнении константы. Причём это переполнение первый раз появлялось при t == 36000. 35999 раз до этого всё было хорошо
Кажется, ответ виден.
h == 1 ... 9, в диапазоне t == 0 ... 32400. Что умещается в -32768 ... 32767, отведённые под int.
А при t == 36000 h == 10.
И когда умножается h*3600 == 36000, которые больше диапазона int.
Ура, теперь вообще всё понятно!
Большое спасибо за подсказки, коты!