Обоснование отрицательных целых чисел CBOR

Я не понимаю, почему CBOR предпочитает кодировать отрицательные целые числа как двоичные числа без знака со значением, определенным как -1 минус значение без знака, вместо, например, регулярное представление дополнения до двух. Есть ли очевидное преимущество, которое я упускаю, кроме увеличенного отрицательного диапазона (который, ИМО, имеет сомнительную ценность по сравнению с повышенной сложностью)?


person JIR    schedule 29.05.2018    source источник


Ответы (1)


Преимущества:

  1. Для каждого целочисленного значения существует только один допустимый тип кодирования, поэтому все кодировщики будут выдавать согласованный вывод. Если кодировщики используют кратчайшее кодирование для каждого значения, рекомендованное спецификацией, они будут выдавать идентичный вывод.
  2. Выбрать самое короткое числовое поле для неотрицательных чисел проще, чем для отрицательных чисел со знаком, и CBOR стремится к тому, чтобы крошечные устройства IOT могли легко передавать данные.
  3. Он умещает в два раза больше значений в каждую ширину поля целочисленного кодирования, что делает данные более компактными. (Было бы еще компактнее, если бы целочисленные кодировки не перекрывались, но это было бы заметно сложнее.)
  4. Он может обрабатывать вдвое большее отрицательное значение, прежде чем потребуется расширение bignum.
person Jerry101    schedule 29.08.2018
comment
Все это правда, хотя я думаю, что 3 и 4 являются основными движущими силами. Для умной реализации это может уменьшить размер декодера, хотя это может быть неясно на первый взгляд. дополнительные информационные данные всегда декодируются как беззнаковые в общем коде, прежде чем декодер отправит их на основе кода основного типа. - person Burt_Harris; 08.10.2018