从 3 个字节生成一个 16 位整数,最大值为 31(5 位)

Make a 16 bit integer from 3 bytes with 31 max value (5 bits)

我想从 3 个小字节序字节中生成一个 16 位的值,最大值为 31(这意味着它们最多有 5 个设置位)。我如何获取字节的最后 5 位,然后将它们放在一起?

例如字节:0011111 0010101 0011100 到 1111110101111000

我试过了,但我想我只是在覆盖我的旧位

cp = (bar << 3) | (bag >> 2) | (bab >> 7);

您不是在覆盖位,而是在将位放在一起之前将位从值中移出。 bag >> 2 只保留原来的三位,bab >> 7 移出所有五位加上另外两位。

改为将值向左移动:

cp = (bar << 10) | (bag << 5) | bab;

您想在右侧为其他值腾出空间:

bar << 10  -11111----------
bag << 5   ------10101-----
bab        -----------11100