Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Когда следует использовать неподписанные значения вместо подписанных?
Когда уместно использовать беззнаковую переменную вместо знаковой? А как насчет цикла for ?
Я слышал много мнений по этому поводу и хотел посмотреть, есть ли что-то похожее на консенсус.
for (unsigned int i = 0; i < someThing.length(); i++) {
SomeThing var = someThing.at(i);
// You get the idea.
}
Я знаю, что Java не имеет неподписанных значений, и это, должно быть, было сознательным решением со стороны Sun Microsystems.
Я был рад, что нашелся хороший разговор на эту тему, так как раньше не придавал этому особого значения.
Таким образом, signed-это хороший общий выбор , даже если вы абсолютно уверены, что все числа положительны, если вы собираетесь делать арифметику над переменной (как в типичном случае цикла for).
Если вы собираетесь делать побитовые вещи, такие как маски, unsigned начинает иметь больше смысла. Или, если вы отчаянно хотите получить этот дополнительный положительный диапазон, используя бит знака.
Лично мне нравится подписанный, потому что я не доверяю себе оставаться последовательным и избегать смешивания двух типов (как предупреждает статья).
В приведенном выше примере, когда 'i' всегда будет положительным и более высокий диапазон будет полезен, unsigned будет полезен. Например, если вы используете операторы 'declare', такие как:
#declare BIT1 (unsigned int 1)
#declare BIT32 (unsigned int reallybignumber)
Особенно когда эти ценности никогда не изменятся.
Однако, если вы делаете бухгалтерскую программу, где люди безответственны со своими деньгами и постоянно находятся в минусе, вы наверняка захотите использовать 'signed'.
Я согласен со святым, хотя хорошее эмпирическое правило-использовать signed, который C фактически по умолчанию, так что вы охвачены.
Компиляторы C и C++ генерируют предупреждение при сравнении подписанных и неподписанных типов; в вашем примере кода Вы не можете сделать переменную цикла неподписанной и заставить компилятор генерировать код без предупреждений (предполагая, что указанные предупреждения были включены).
Естественно, вы компилируете с предупреждениями, развернутыми вверх, не так ли?
И, может быть, вы подумали о компиляции с "treat warnings as errors", чтобы сделать еще один шаг вперед?
Недостатком использования знаковых чисел является то, что есть соблазн перегрузить их так, чтобы, например, значения 0->n были выбраны в меню, а значение -1 означает, что ничего не выбрано - вместо того, чтобы создавать класс, который имеет две переменные, одну для указания, если что-то выбрано, а другую для хранения того, что это выбор. Прежде чем вы это осознаете, вы тестируете на отрицательный результат повсюду, и компилятор жалуется на то, что вы хотите сравнить выбор меню с количеством вариантов меню, которые у вас есть, но это опасно, потому что они разные типы. Так что не делай этого.
Я думаю, что если ваш бизнес-кейс диктует, что отрицательное число недопустимо, вы хотели бы, чтобы ошибка была показана или выброшена.
Имея это в виду, я только недавно узнал о беззнаковых целых числах, работая над проектом, обрабатывающим данные в двоичном файле и хранящим их в базе данных. Я намеренно использовал двоичные данные "corrupting" и в итоге получил отрицательные значения вместо ожидаемой ошибки. Я обнаружил, что даже при преобразовании значения это значение не было допустимым для моего бизнес-кейса.
Моя программа не ошиблась, и в итоге я получил неверные данные в базу данных. Было бы лучше, если бы я использовал uint и программа потерпела неудачу.