Honestly, no, there&#x27;s no &quot;good&quot; reason.<p>In practice the reason it ended up designed this way is because varint was introduced first with no special support for negative numbers, and then zigzag was introduced years later. Zigzag worked well because it stacked on top of the existing varint parser without changing it.<p>But for a new format with no backwards-compatibility constraints, it would probably make much more sense to use sign extension (so, the first encoded bit becomes the sign bit).<p>(I am the person who rewrote and open sourced protobufs at Google, though I am not the inventor.)