关于51中的 |=和&=
时间:10-02
整理:3721RD
点击:
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); //得到低四位
}
意思是P2=P2|0x01
或者am=am&0x01
你多来问几次就能记牢的了
其实刚发完贴,5秒后,我就记得了- -!
估计下次又记不得,或者把&跟|搞乱
上面的
a = P2;
b = a/16; //得到高4位
c = a%16; //得到低4位
abc得改为INT型
与 就是强制某些位清0
或 就是强制某些位置1
异或 就是把某些位取反