#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <ctype.h>
#include <limits.h>
/*指定一个范围的位,用一个数据区替换另外一个数据中的位: 存储的范围从1开始[end,start]*/
int store_bit_field(int original_Value, int value_to_store, unsigned starting_bit, unsigned ending_bit) {
// 第一步: 创建并设置掩码
int mask = 0,move = 1;
int len = starting_bit - ending_bit + 1;
// 先设置对应位置的数据
while (len) {
mask |= move;
move <<= 1;
len--;
}
mask <<= ending_bit;
// 第二步 将被替换的位设置为0,其它位置不变,为了方便后面修改
original_Value &= (~mask);
// 第三步 将新值左移
value_to_store <<= ending_bit;
// 第四步 将新值作为交换的位的其余位都设置为0
value_to_store &= mask;
// 第五步 得到结果值
return original_Value | value_to_store;
}