使用C语言对寄存器赋值时,常常需要用到C语言的位操作方法。
把寄存器某位清零
假设a代表寄存器,且其中本来已有值。如果要把其中某一位清零且其它位不变,代码如下。
//定义一个变量a=b(二进制数)unsignedchara=0x9f;//对bit2清零a=~(12);//括号中的1左移两位,(12)得二进制数:b//按位取反,~(12)得b//假如a中原来的值为二进制数:a=b//所得的数与a作”位与”运算,a=(b)(b),//经过运算后,a的值a=b//a的bit2位被被零,而其它位不变。
把寄存器某几个连续位清零
由于寄存器中有时会有连续几个寄存器位用于控制某个功能,现假设我们需要把寄存器的某几个连续位清零,且其它位不变,代码如下。
//若把a中的二进制位分成2个一组//即bit0、bit1为第0组,bit2、bit3为第1组,//bit4、bit5为第2组,bit6、bit7为第3组//要对第1组的bit2、bit3清零a=~(32*1);//括号中的3左移两位,(32*1)得二进制数:b//按位取反,~(32*1)得b//假如a中原来的值为二进制数:a=b//所得的数与a作”位与”运算,a=(b)(b),//经过运算后,a的值a=b//a的第1组的bit2、bit3被清零,而其它位不变。//上述(~(32*1))中的(1)即为组编号;如清零第3组bit6、bit7此处应为3//括号中的(2)为每组的位数,每组有2个二进制位;若分成4个一组,此处即为4//括号中的(3)是组内所有位都为1时的值;若分成4个一组,此处即为二进制数“b”//例如对第2组bit4、bit5清零a=~(32*2);
对寄存器某几位赋值
寄存器位经过清零操作后就可以方便地对某几位写入所需要的数值了,具体代码如下。
//a=b//此时对清零后的第2组bit4、bit5设置成二进制数“01b”a
=(12*2);//a=b,成功设置了第2组的值,其它组不变
寄存器某位取反
要对寄存器的某个位进行取反操作,即1变0,0变1,这可以直接用如下操作。
//a=b//把bit6取反,其它位不变a^=(16);//a=b相关推荐??万字
菊花厂C语言编程10大规范??这样理解C语言的指针,还难吗???入门C语言基础问答??交流群与学习资料预览时标签不可点收录于合集#个上一篇下一篇