от
Когда уместно использовать беззнаковую переменную за автографом? Что о в цикле
for
? Я слышал много мнений об этом и я хотел посмотреть, нет ли ничего похожего на консенсус.
for (unsigned int i = 0; i

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

6 Ответы

0 голосов
от
Когда уместно использовать беззнаковую переменную за автографом? Что о в цикле
for
? Я слышал много мнений об этом и я хотел посмотреть, нет ли ничего похожего на консенсус.
for (unsigned int i = 0; i
0 голосов
от
Я был рад найти хороший разговор на эту тему, поскольку мне не очень задумывался над этим раньше. В резюме, подпись-хороший выбор - даже если вы уверены, что все числа положительные - если вы собираетесь делать арифметические операции над переменной (как в типичном для случае петля). Если вы собираетесь делать побитовые такие вещи, как маски, неподписанных начинает иметь больше смысла. Или, если вы в отчаянии, чтобы получить дополнительную положительном диапазоне, воспользовавшись бит знака. Лично я бы подписал, потому что я не доверяю себе, чтобы оставаться последовательным и не смешивать два типа (как в статье предостерегает).
0 голосов
от
В вашем примере выше, когда " я " всегда будет положительным и более высокий диапазон будет выгодно, неподписанных бы полезно. Как если вы используете 'объявление' заявления, такие как:
#declare BIT1 (unsigned int 1)
#declare BIT32 (unsigned int reallybignumber)
Особенно, когда эти значения не будут меняться. Однако, если вы делаете программу бухгалтерского учета, где люди невменяемые со своими деньгами и постоянно в минусе, вы определенно хотите использовать 'подпись'. Я согласен с Сен-хоть что хорошее эмпирическое правило заключается в использовании подписано, что на самом деле C по умолчанию, поэтому вы застрахованы.
0 голосов
от
C и C выдаст предупреждение при сравнении знаковых и беззнаковых типов; в вашем примере кода, Вы не могли сделать свой переменной без знака и компилятор генерировать код без предупреждений (если сказал, что предупреждения были включены). Естественно, вы компилируете с предупреждениями включен всю дорогу, верно? И, вы рассматривали компиляции с "обрабатывать предупреждения как ошибки", чтобы считать, что один шаг вперед? Недостатком с использованием числами со знаком заключается в том, что есть искушение перегрузить их так, что, например, значения 0->n-это меню выбора, и -1-значит ничего не выбрано - вместо создания класса, который имеет две переменные, одна для указания, если что-то выбрали и еще в магазине какой то выбор. Прежде чем вы это знаете, вы тестируете за негативное повсюду и компилятор жалуется о том, как ты хочешь сравнить в меню выбор количество меню у вас - но это опасно, потому что они разных типов. Так что не делайте этого.
0 голосов
от
Я думаю, что если ваш бизнес-кейс подсказывает, что отрицательное число является недействительным, вы хотите, чтобы ошибка была показана или брошены. Имея это в виду, я только совсем недавно узнала о беззнаковых целых работая над проектом обработка данных в двоичный файл и записывать данные в базу данных. Я намеренно "тлетворного" двоичные данные, и в конечном итоге получаются отрицательные значения вместо ожидаемой ошибки. Я обнаружил, что, хотя значение преобразованное значение не является допустимым для моего бизнеса. Моя программа не ошибка, и я в конечном итоге получить неправильные данные в базу данных. Было бы лучше, если бы я использовал
uint
и программа провалится.
0 голосов
от
size_t
часто хороший выбор для этого, или
size_type
если вы используете STL класс.
...