Hacker News new | ask | show | jobs
by phoboslab 1664 days ago
I should probably fix that. Is there a clever way to unpack a 5bit signed int other than treating it as unsigned and subtracting 16?
2 comments

You'll have to shift the values around anyway, so:

int intermediate = byte_or_word << N; // N chosen to put the five bits in the highest positions in the int.

int value = intermediate >> bits_per_int - 5;

Instead of masking rely on arithmetic shift right to keep the sign bit.

That seems easiest.
Especially since your compiler will make it a super magical optimised version.