思路:
所有数组都移位,那么其中一个元素的值的溢出位将和相邻的元素进行合并,
因此只要记住上一元素的溢出位,在下一元素移动后合并即可。
#define ELEMCNT 3 //定义数组元素个数
char a[ELEMCNT]; //被操作的元素
char exceedA=0,exceedB=0;//记忆溢出位用的变量,其中exceedA为上一元素溢出值,exceedB为本元素溢出值
//定义整体移动函数,其中k为左移位数
void LeftElem(int k){
int i;
char Msk=0;//用于计算溢出位的掩码,如k=6时,其掩码值为00000011(二进制)
for (i=0;i<8-k;i++){
Msk=Msk|(1<<i);
}
//移动所有数组元素,i值对应数组元素下标i-1
余缺 for (i=ELEMCNT;i>0;i--){
exceedB=(a[i-1]&(~Msk))>>神凯(8-k);//计算溢出游毁唤数据
a[i-1]=a[i-1]<<k+exceedA;
exceedA=exceedB;
}
}