Если current_time
больше или равно last_time
, отрицательного значения быть не может.
Чтобы процитировать раздел 6.2.1.2 «Целые числа со знаком и без знака» спецификации C90:
Когда значение с целочисленным типом преобразуется в другой целочисленный тип, если значение может быть представлено новым типом, его значение не изменяется.
Поскольку unsigned short
короче, чем int
, все значения типа unsigned short
могут быть представлены int
, поэтому значения current_time
и last_time
, преобразованные в int
, будут такими же, как их непреобразованное значение unsigned short
, а результат вычитания будет что вы ожидаете, что это будет.
Однако если current_time
меньше last_time
, возможно отрицательное значение; это, однако, не ошибка, а особенность, потому что в этом случае время действительно действительно пошло назад.
Если бы current_time
и last_time
были unsigned int
s, а current_time
были меньше last_time
, результатом вычитания было бы unsigned int
и, следовательно, не отрицательно; это будет разница между временами по модулю максимального значения unsigned int
.
В любом случае, вы, вероятно, захотите обрабатывать время в обратном направлении, если это может произойти.
person
Community
schedule
14.10.2015