On Sun, Mar 21, 2010 at 8:54 AM, Adam Kwintkiewicz <
adam.kwintkiew...@gmail.com> wrote:

> Thank you for your reply. Yes you are right. I just wondered why int32
> consists of 10 bits, rather than a maximum of 5 (in the case of large or
> negative numbers).


So that you can change an int32 to int64 without breaking compatibility.


>
>
> Adam
>
> 2010/3/21 Henner Zeller <henner.zel...@googlemail.com>
>
> On Sun, Mar 21, 2010 at 08:05, Adam Kwintkiewicz
>> <adam.kwintkiew...@gmail.com> wrote:
>> > "... for a negative number, the resulting varint is always ten bytes
>> long
>> > ..."
>>
>> Reason for that is the varint encoding: it only encodes the bits that
>> are set in an integer. For small positive values that results in a
>> more compact format. However, negative values always have the very
>> first bit set (the sign bit), so these values end up to be longer.
>>
>> If you have values that are centering around zero but whose absolute
>> values usually don't use the full range, then the 'sint32' would be
>> probably a better encoding for you: it is done in 'zigzag'-encoding
>> that uses short encoding for small absolute values and longer for
>> larger absolute values.
>> If your numbers are big or pretty random, then you might consider fixed32.
>>
>> Note however, that changing the type from int32 to sint32 or fixed32
>> are not compatible - so if you've already data stored that way or have
>> running services that talk RPC in that way, you need an upgrade path;
>> probably adding a new field with the new encoding, setting it in
>> parallel for some time (until all other users are gone). If you have
>> stored data the old way and don't want to recode than you've to
>> forever test - on reading - if the 'old' field exists and take that
>> value.
>>
>> -h
>>
>> >
>> > I didn't saw that part.
>> > Thanx
>> >
>> > 2010/3/21 Evan Jones <ev...@mit.edu>
>> >>
>> >> On Mar 21, 2010, at 8:46 , adamdms wrote:
>> >>>
>> >>> I am wonder why int32 field (with negative value) has 10 bytes?
>> >>> 10 - field No 2, wire type 0
>> >>> FD FF FF FF FF FF FF FF FF 01 - field value = -3
>> >>>
>> >>> Can someone explain it to me?
>> >>
>> >> See:
>> http://code.google.com/apis/protocolbuffers/docs/encoding.html#types
>> >>
>> >> Hope this helps,
>> >>
>> >> Evan
>> >>
>> >> --
>> >> Evan Jones
>> >> http://evanjones.ca/
>> >>
>> >
>> > --
>> > You received this message because you are subscribed to the Google
>> Groups
>> > "Protocol Buffers" group.
>> > To post to this group, send email to proto...@googlegroups.com.
>> > To unsubscribe from this group, send email to
>> > protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@googlegroups.com>
>> .
>> > For more options, visit this group at
>> > http://groups.google.com/group/protobuf?hl=en.
>> >
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To post to this group, send email to proto...@googlegroups.com.
> To unsubscribe from this group, send email to
> protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/protobuf?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to proto...@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to