Информация об изменениях

Сообщение UPD: это, оказывается, некропост. Кто-то зачем-то поднял от 30.07.2023 8:09

Изменено 30.07.2023 13:39 Alekzander

Re: Откуда эта лютая любовь к знаковым целым?
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Даже во многих современных программах на C++ часто вижу int/short/long там, где по смыслу должно быть беззнаковое целое. А в ранних программах знаковые целые вообще использовались везде, где было технически возможно. Даже в классической книге Кернигана/Ритчи множество примеров, где счетчики, индексы и прочие имеют знаковый тип. В виндовых SDK, где знаковость в основном используется адекватно, все равно регулярно встречаются знаковые параметры размеров, количеств и прочего, где не используются отрицательные значения для особых случаев.


ЕМ>Откуда такое пристрастие, кроме как от лени? Вроде как сколько-нибудь массовых процессоров, где беззнаковые целые поддерживались бы ограниченно, не существует. Есть в этом хоть какое-то рациональное зерно?


Никто не считает яблоки и не задаёт порядковый номера домов в "беззнаковых целых числах", все думают о них как о "целых". Поэтому и слово unsigned (или буква u в начале) превращает мысленно проговариваемое "целое число" в некое "беззнаковое целое число". Для меня это веская причина, т.к. код читают люди, а отвлекать их от чтения — плохая идея. Не сомневаюсь, что и Кернихан с Ричи руководствовались этим же соображением.

С другой стороны, когда авторы хотят подчеркнуть, что знака не должно быть, это тоже веская причина использовать unsigned. И веская тоже потому, что код читают люди. Но при этом, я считаю, возникает дополнительная ответственность. Надо убедиться, что моделируемое число в предметной области никогда не должно быть отрицательным (чего часто не делают). Что при расчётах промежуточные результаты не уйдут за ноль. Что для передачи ошибки предусмотрен другой канал. А если всего этого не делают, то уж лучше использовать знаковое. Которое является просто максимально общим случаем. Избыточное обобщение не ошибка, а избыточное сужение — да.

К счастью, в большинстве случаев это неважно. Работать с коллекциями лучше в функциональном стиле, а размер вообще не считать числом.
UPD: это, оказывается, некропост. Кто-то зачем-то поднял
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Даже во многих современных программах на C++ часто вижу int/short/long там, где по смыслу должно быть беззнаковое целое. А в ранних программах знаковые целые вообще использовались везде, где было технически возможно. Даже в классической книге Кернигана/Ритчи множество примеров, где счетчики, индексы и прочие имеют знаковый тип. В виндовых SDK, где знаковость в основном используется адекватно, все равно регулярно встречаются знаковые параметры размеров, количеств и прочего, где не используются отрицательные значения для особых случаев.


ЕМ>Откуда такое пристрастие, кроме как от лени? Вроде как сколько-нибудь массовых процессоров, где беззнаковые целые поддерживались бы ограниченно, не существует. Есть в этом хоть какое-то рациональное зерно?


Никто не считает яблоки и не задаёт порядковый номера домов в "беззнаковых целых числах", все думают о них как о "целых". Поэтому и слово unsigned (или буква u в начале) превращает мысленно проговариваемое "целое число" в некое "беззнаковое целое число". Для меня это веская причина, т.к. код читают люди, а отвлекать их от чтения — плохая идея. Не сомневаюсь, что и Кернихан с Ричи руководствовались этим же соображением.

С другой стороны, когда авторы хотят подчеркнуть, что знака не должно быть, это тоже веская причина использовать unsigned. И веская тоже потому, что код читают люди. Но при этом, я считаю, возникает дополнительная ответственность. Надо убедиться, что моделируемое число в предметной области никогда не должно быть отрицательным (чего часто не делают). Что при расчётах промежуточные результаты не уйдут за ноль. Что для передачи ошибки предусмотрен другой канал. А если всего этого не делают, то уж лучше использовать знаковое. Которое является просто максимально общим случаем. Избыточное обобщение не ошибка, а избыточное сужение — да.

К счастью, в большинстве случаев это неважно. Работать с коллекциями лучше в функциональном стиле, а размер вообще не считать числом.