29 ms·
I first encountered this in the Flac source[1]. They do the bit twiddling a bit differently than in this article: uval = (val<<1) ^ (val>>31); Variations
by phoboslab 4y ago
I first encountered this in the Flac source[1]. They do the bit twiddling a bit differently than in this article:
uval = (val<<1) ^ (val>>31);
Variations of this have probably been used countless of times in other libraries.
[1] https://github.com/LordJZ/libflac/blob/master/src/libFLAC/bitwriter.c#L406-L407 https://github.com/LordJZ/libflac/blob/master/src/libFLAC/bi...
- jamesmunns 4y agoAuthor of postcard here, I don't remember exactly where I got my bit twiddling example from, lemme see if I have notes from that. postcard's zigzag encoding matches phoboslab's psuedocode. Edit, not totally sure, but this wiki page rings a bell, and is probably where I got my impl from: https://en.wikipedia.org/wiki/Variable-length_quantity#Zigzag_encoding https://en.wikipedia.org/wiki/Variable-length_quantity#Zigza... Edit 2: I also explain why I do this (it compresses better) in my wire format specification: https://postcard.jamesmunns.com/wire-format.html#signed-integer-encoding https://postcard.jamesmunns.com/wire-format.html#signed-inte...