|
楼主 |
发表于 2016-12-23 00:17:45
|
显示全部楼层
unchar shift(unchar sonsor, unchar blow)
{
blow_2 = blow_1;
blow_1 = blow;
for (z=1;z<9; z++) //将进位标记推迟一个时钟
{
n[z]=tick_bit[z];
}
for (z=1;z<9; z++) //移位始终执行
{
mov[z]=mov[z]<<1;
i=mov[z]&0x80; //当第7位为1,设置进位标志
if (i==0x80)
tick_bit[z]=1;
else
tick_bit[z]=0;
}
if ((sonsor == 0x04) && (blow_2 == 0x02)) //输入高电平,第0位置1。
mov[1]=mov[1]|0x01;
else
mov[1]=mov[1]&0xfe;
for (z=1;z<9; z++) //检查前一位是否有进位,有侧置第0位为1
{
if (n[z]==1)
mov[z+1]=mov[z+1]|0x01;
else
if (n[z]==0)
mov[z+1]=mov[z+1]&0xfe;
}
y=mov[6]&0x80; //输出
if (y == 0x80)
return 1; //排出异常
else
return 0; //排出正常
}
这是我之前用的方法,就是用数组。因为我的结果只有0和1,所以一个变量可以移八个位,这个程序最长可以移8X8 = 64位和4557是一样的。如果一个程序里有多个要进行移位的的比较麻烦了。 |
|