拼接和拆分的顺序是反的,
简单说就是把数据a的高30位左移2位(二进制0000 0000 0000 0000 | 0000 0000 0000 11),
然后加上低2位的数据(二进制10)
#include <iostream>
using namespace std;
int main()
{
int a = 14;
// 把int a拆分成左30位,右2位
int a_left = (a & 0xfffffffc) >> 2;
int a_right = (a & 0xfffffff3);
// 合并
int a_ori = (a_left << 2) + a_right;
std::cout << "a_left="<<a_left<<endl;
std::cout << "a_left=" << a_right << endl;
std::cout << "a_ori=" << a_ori << endl;
}
输出
a_left=3
a_left=2
a_ori=14