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

时间:2015-08-31 19:33:49

标签: c# bit-manipulation

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

e.g。字节:0011111 0010101 0011100进1111110101111000

我尝试了这个,但我想我只是覆盖了我的旧位

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

1 个答案:

答案 0 :(得分:2)

您没有覆盖位,但是在将它们组合在一起之前,您正在将位移出值。 bag >> 2只留下原始的三位,bab >> 7将所有五位加上另外两位。

将值向左移动:

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

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

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