我想从3个小端字节中获取16位值,最大值为31(这意味着它们最多为5个设置位)。我如何获得字节的最后5位,然后将它们全部放在一起?
e.g。字节:0011111 0010101 0011100进1111110101111000
我尝试了这个,但我想我只是覆盖了我的旧位
cp = (bar << 3) | (bag >> 2) | (bab >> 7);
答案 0 :(得分:2)
您没有覆盖位,但是在将它们组合在一起之前,您正在将位移出值。 bag >> 2
只留下原始的三位,bab >> 7
将所有五位加上另外两位。
将值向左移动:
cp = (bar << 10) | (bag << 5) | bab;
您希望在右侧为其他值腾出空间:
bar << 10 -11111----------
bag << 5 ------10101-----
bab -----------11100