private long ReadField(bool big) { if (ReadBit() == 0) return 0; uint code = ReadBits(2); byte width = (big)?widths2[code]:widths[code]; long value = ReadBits(width); value |= -(value & (1 << (width-1))); return value; }