Должен ли я использовать «без знака» каждый раз, когда я знаю, что я обрабатываю неподписанные значения?

Часто значения, как известно, являются положительными. Например, порядковый номер TCP / UDP всегда является положительным значением. И то и другое int а также unsigned int достаточно большие, чтобы хранить даже самые большие sequence number поэтому я могу использовать любой из этих типов. Есть много других примеров, когда значения известны как положительные.

Есть ли причины использовать unsigned типа, когда емкость обычного signed типа достаточно (и часто более чем достаточно)?

Лично я склонен использовать обычные типы, потому что:

  • int вероятно, немного более читабельным, чем uint или же unsigned int
  • Мне не нужно включать дополнительные заголовки для UINT и т.п.
  • Я буду избегать лишних приведений где-то дальше в программе

Причины использовать unsigned типа я могу себе представить:

  • помочь компилятору генерировать лучший код?
  • помогите другому программисту понять, что переменная не подписана
  • избегайте возможных ошибок (например, когда int присваивается компилятору UINT, вероятно, возникнет ошибка во время компиляции, и мы должны проверить, что назначаемое нами значение не является отрицательным)

9

Решение

Одна из причин заключается в том, что сравнение чисел со знаком и без знака может привести к неожиданным результатам. В C и (я думаю) C ++ сравнение чисел со знаком и без знака приводит к тому, что число со знаком интерпретируется как без знака. Если значение со знаком окажется отрицательным, чтение его без знака даст БОЛЬШЕ значение, чем любое число без знака, а это не то, что вам нужно. Увидеть этот вопрос для примера в Objective-C, который использует те же правила преобразования, что и C.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]