В буферах протокола google encoding overview они вводят что-то, называемое «Zig Zag Encoding», это принимает подписанные числа с небольшой величиной и создает серию беззнаковых чисел, которые имеют малую величину.Декодирование Zig Zag
Например
Encoded => Plain
0 => 0
1 => -1
2 => 1
3 => -2
4 => 2
5 => -3
6 => 3
И так далее. Функция кодирования они дают для этого достаточно умна, это:
(n << 1)^(n >> 31) //for a 32 bit integer
Я понимаю, как это работает, однако, я не могу за жизнь мне понять, как изменить это и декодировать его обратно в подписанных 32-разрядных целых чисел
Я знал, что должен быть способ размножения. Престижность! – ergosys
Этот, похоже, не работает:/ – Martin
Ну, это работает для меня и для ergosys, поэтому он тоже должен работать для вас ... Можете ли вы рассказать мне, какие результаты вы получите? – 3lectrologos