如何使用位操作在单个整数中编码和解码两个数字?

Ank*_*wah 1 c++ bits bitset

我正在学习有点操作然后我想到了这一点.假设我有两个数字,第一个在[1,6]的范围内,第二个在[0,3]的范围内.现在第一个数字可以存储最多3个比特,第二个数字可以存储2个比特.我如何使用一个int32将它们都存储在其中.谢谢.

ngl*_*lee 6

编码:

// a : range of [1,6], bit0 ~ bit2
// b : range of [0,3], bit3 ~ bit4
// c : encoded int32
c = 0;
c |= (a | b << 3);
Run Code Online (Sandbox Code Playgroud)

解码:

a = (c & 0x00000007);
b = (c & 0x00000018) >> 3;
Run Code Online (Sandbox Code Playgroud)