关于51中的 |=和&=

2019-07-15 18:33发布

本帖最后由 music_mc 于 2014-9-14 10:23 编辑

void main()
{        unsigned char a,b,c;
        //自己做来记牢的,供大家参考

        //按位与“&”        必须都为‘1’ 否则为‘0’
        P2        =        0xff;               
        P2        &=        0x80;                // 'P2=P2&0X80' 意思相同        
                                                //1111 1111 & 1000 000        
                                                //结果P2.7=1,其余都为0 “1000 0000”


        //按位或“|” 必须都为‘0’ 否则为‘1’
        P0        =        0x00;                //改为P1/P2/P3都可以,就是P0调试会有不同
        P0        |=        0x11;                //'P0=P0|0x11' 意思相同
                                                //0000 0000 | 0001 0001
                                                //结果是0001 0001        P0.0和P0.4为‘1’


   //按位异或“^” 相同为‘0’ 不同为‘1’
   //暂无

   //按位取反“~” ‘1’为‘0’        ‘0’为‘1’
        P1        =        0x7d;                //0111,1101
        P1        =~        P1;                        //1000,0010

        
        //左移“>>” 右移"<<"        
        P3        =        0xf0;                //1111 0000                未左移前
        P3        =        P3>>4;                //0000 1111                左移后          P3>>=4; 意思相同
        P3        =        P3<<4;                //1111 0000                右移回          P3<<=4; 意思相同                        
               

        //循环左移_crol_(X,1)、循环右移_cror_(X,1)           
        P2        =        0xfe;                          //P2.0为‘0’                  1111 1110
        P2        =        _crol_(P2,1);         //左移1位 循环        1111 1101
        P2        =        _cror_(P2,1);        //右移1位 循环        1111 1110
                                                        //循环表示当P2.0左移到超过P2.7时,又跳到P2.0

        //高四位取反,低四位不变
        P2        =        0xfa;                                                 //1111 1010          执行前
        P2 = ((~P2) & 0xF0) | (P2 & 0x0F);        //0000 1010          执行后
        //(P2 & 0x0F)                1111 1010 & 0000 1111 = 0000 1010
        //((~P2) & 0xF0)        0000 0101 & 1111 0000 = 0000 0000        
        //0x00|0x0a=0x0a
        //以下也可以高4位取反,低4位不变
        P2        =        0x37;                    //0011 0111
        a        =        P2>>4;                    //0000 0011
        a        =~        a;                            //1111 1100
        a        <<=        4;                                //1100 0000
        b        =        P2<<4;                        //0111 0000
        b        >>=        4;                                //0000 0111
        a        =        a|b;                        //1100 0111

        
        //取得高4位,或者取得低4位
        P2        =        0x3f;
        a        =        P2>>4;        //得到高4位
        b        =        P2<<4;        //得到低4位
        //也可以是下面这样
        a        =        P2;
        b        =        a/16;        //得到高4位
        c        =        a%16;        //得到低4位
        //在或者
        b = (a & 0xF0) >> 4;     //得到高四位
        c = (a & 0x0F);          //得到低四位        
        
               
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。