Encoding CBOR负整数的基本原理

Encoding CBOR负整数的基本原理,encoding,signed,cbor,Encoding,Signed,Cbor,我不明白为什么CBOR选择将负整数编码为无符号二进制数,其值定义为-1减去无符号值,而不是常规2的补码表示。除了增加负范围之外,我还缺少一个明显的优势吗?在我看来,负范围与增加的复杂性相比具有值得怀疑的价值?优势: 每个整数值只有一种允许的编码类型,因此所有编码器将发出一致的输出。如果编码器按照规范的建议对每个值使用最短编码,它们将发出相同的输出。 非负数比有符号负数更容易选择最短的数字字段,CBOR旨在使小型物联网设备能够轻松传输数据。 它将两倍的值放入每个整数编码字段宽度中,从而使数据更加紧

我不明白为什么CBOR选择将负整数编码为无符号二进制数,其值定义为-1减去无符号值,而不是常规2的补码表示。除了增加负范围之外,我还缺少一个明显的优势吗?在我看来,负范围与增加的复杂性相比具有值得怀疑的价值?

优势:

每个整数值只有一种允许的编码类型,因此所有编码器将发出一致的输出。如果编码器按照规范的建议对每个值使用最短编码,它们将发出相同的输出。 非负数比有符号负数更容易选择最短的数字字段,CBOR旨在使小型物联网设备能够轻松传输数据。 它将两倍的值放入每个整数编码字段宽度中,从而使数据更加紧凑。如果整数编码不重叠,它会更紧凑,但那会更复杂。 在需要bignum扩展之前,它可以处理两倍大的负值。
这些都是事实,尽管我认为3和4是主要的驱动因素。对于一个聪明的实现,它可以减少解码器的大小,尽管乍一看可能并不清楚。附加信息数据在解码器基于主要类型代码进行调度之前,始终在公共代码中解码为无符号。