Часто значения, как известно, являются положительными. Например, порядковый номер TCP / UDP всегда является положительным значением. И то и другое int
а также unsigned int
достаточно большие, чтобы хранить даже самые большие sequence number
поэтому я могу использовать любой из этих типов. Есть много других примеров, когда значения известны как положительные.
Есть ли причины использовать unsigned
типа, когда емкость обычного signed
типа достаточно (и часто более чем достаточно)?
Лично я склонен использовать обычные типы, потому что:
int
вероятно, немного более читабельным, чем uint
или же unsigned int
UINT
и т.п.Причины использовать unsigned
типа я могу себе представить:
Одна из причин заключается в том, что сравнение чисел со знаком и без знака может привести к неожиданным результатам. В C и (я думаю) C ++ сравнение чисел со знаком и без знака приводит к тому, что число со знаком интерпретируется как без знака. Если значение со знаком окажется отрицательным, чтение его без знака даст БОЛЬШЕ значение, чем любое число без знака, а это не то, что вам нужно. Увидеть этот вопрос для примера в Objective-C, который использует те же правила преобразования, что и C.
Других решений пока нет …