Не совсем очевидно, почему нужно было бы объединить (десятичные) значения «ascii». Несомненно, что объединение их без ведущих нулей (или какого-либо другого дополнения или разделителя) бесполезно - ничто не может быть надежно восстановлено из такого выхода.
>>> tests = ["hi", "Hi", "HI", '\x0A\x29\x00\x05']
>>> ["".join("%d" % ord(c) for c in s) for s in tests]
['104105', '72105', '7273', '104105']
Обратите внимание, что первые 3 выхода разной длины. Обратите внимание, что четвертый результат совпадает с первым.
>>> ["".join("%03d" % ord(c) for c in s) for s in tests]
['104105', '072105', '072073', '010041000005']
>>> [" ".join("%d" % ord(c) for c in s) for s in tests]
['104 105', '72 105', '72 73', '10 41 0 5']
>>> ["".join("%02x" % ord(c) for c in s) for s in tests]
['6869', '4869', '4849', '0a290005']
>>>
Не замечайте таких проблем.
Будет ли всегда быть пол подразделения? Что такое определенное поведение?
blockquote>Да, целочисленное частное из двух операндов.
6.5.5 Мультипликативные операторы
6 Когда целые числа делятся, результат оператора / является алгебраическим фактором с любой дробной частью, отброшенной.88) Если фактор a / b является представимым, выражение (a / b) * b + a% b должно быть равно a.
blockquote>и соответствующая сноска:
88) Это часто называют «усечением к нулю».
blockquote>Конечно, необходимо отметить два момента: :
3 Обычные арифметические преобразования выполняются в операндах.
blockquote>и:
5 Результат / operator является частным от деления первого операнда на второй; результатом оператора% является остаток. В обеих операциях, если значение второго операнда равно нулю, поведение не определено.
blockquote>[Примечание: Акцент мой]
Если результат отрицательный, C усекает в направлении 0, а не настил пола, - я узнал об этом чтении о том, почему Python целое деление всегда здесь: Почему Python Integer Division Floors
div
является оператором деления пола и factor
нечетным, то filtered += (filter+(factor div 2)) div factor
даст чистое и симметричное поведение для всех значений до INT_MAX-(factor div 2)
.
– supercat
21 December 2017 в 19:35
Будет ли всегда быть пол деления?
blockquote>No. Результат варьируется, но изменение происходит только для отрицательных значений.
Каково заданное поведение?
blockquote>Чтобы очистить полные раунды к отрицательной бесконечности, в то время как целые деления округляются к нулю (обрезанные)
Для положительных значений они одинаковы
int integerDivisionResultPositive= 125/100;//= 1 double flooringResultPositive= floor(125.0/100.0);//=1.0
Для отрицательного значения это отличается
int integerDivisionResultNegative= -125/100;//=-1 double flooringResultNegative= floor(-125.0/100.0);//=-2.0
(a / b) * b + a % b == a
должно было быть выполнено, а абсолютное значениеa % b
должно быть меньшеa
, но было лиa % b
отрицательным для отрицательныхa
илиb
не указано. – David Thornley 30 August 2010 в 22:28