目录
位运算
1、位运算符
位运算符被用来根据缘由改变引脚高低状态,从而引起外部变化。运算符包含以下几种:
*均要求操作数必须是整型或与整型相兼容的数据类型。
2、各类运算符的用法
(1) 按位与(&)
概念:按位与(&)用来进行指定位清零操作,即其余位状态不变,指定位清零。是一种双目运算符,需要两个操作数。
使用规则:两个都是 1 结果才是 1。
eg1. 对 2 和 6 进行按位与操作 (2 的二进制为:0000 0010 ;6 的二进制为:0000 0110),结果为 2 (0000 0010)
int main(void)
{
int i = 2;
int j = 6;
printf("%d\n", i & j);
}
eg2. 对 0xAA 和 0xEF 进行按位与操作 (0xFF:1111 1111 ; 0xEF:1110 1111),结果为 0xEF(1110 1111)
int main(void)
{
unsigned char P2 = 0xFF;
P2 &= 0xEF;
printf("%X\n", p2);
return 0;
}
(2) 按位或( | )
概念:按位或( | )用来进行指定位置 1 操作。是一种双目运算符,需要两个操作数。
使用规则:有一个为 1 结果就是 1。
eg. 对 0xAA 和 0x48 进行按位或操作 (0xAA:1010 1010 ; 0x48:0100 1000),结果为 0xEA(1110 1010)
int main(void)
{
unsigned char P2 = 0xAA;
P2 |= 0x48;
return 0;
}
(3) 按位异或( ^ )
概念:按位异或( ^ )用来进行指定位翻转操作。是一种双目运算符,需要两个操作数。
使用要求:不同为1,相同为0。
eg. 对 0x0A 和 0x0D 进行异或操作 (0x0A:0000 1010; 0x0D:0000 0111),结果为 0x07(0000 0111)
int main(void)
{
unsigned char P2 = 0x0A;
P2 ^= 0x0D;
printf("%X\n", p2);
return 0;
}
(4) 按位取反( ~ )
概念:按位取反( ~ )用来进行全翻转操作。是一种单目运算符,只需要一个操作数。
使用规则:是 1 取0,是 0 取1。
(5) 左移 (<<)
概念:左移(<<)用来进行指定位左移操作。是一种双目运算符,需要两个操作数。
使用规则:在末尾补0 。
eg. 对 0xFFFFFFFF 进行左移 2 的操作
int main(void)
{
int i = 0xFFFFFFFF;
i <<= 2;
printf("%X\n", i);
return 0;
}
0xFFFFFFFF: 1111 1111 1111 1111 1111 1111 1111 1111 |
左移2 : 11 1111 1111 1111 1111 1111 1111 1100 |
在末尾进行补零操作 |
(6) 右移(>>)
概念:右移(>>)用来进行指定位左移操作。是一种双目运算符,需要两个操作数。
eg. 下列代码输出结果为 0xDF
int main(void)
{
unsigned char P0 = 0xFF;
P0 &= ~((1 << 3) | (1 << 5));
printf("%X\n", P0);
return 0;
}
【END】