位运算

位运算在实际开发中比较少用,主要使用于flag切换用。常见的位运算有&(位与)、|(位或)、^(异或)、~(非)。这些位运算主要用于二进制中。

&运算

0011 & 0101 = 0001 只有当这两个二进制某位都为1时才为1,否则为0。

char n = 6       //00000110
char m = 12      //00001100
printf("%d",m&n) //00000100

打印结果为4

|运算

0011 | 0101 = 0111 当两个二进制某位有一个为1时则这位为1

uint8_t n = 6  //二进制为00000110
int m = 0x13c  //二进制补码为00000000 00000000 00000001 00111100
printf("%d",m|n)

打印结果位318

^运算

0011 ^ 0101 = 0110 只有当这两个二进制某位只有一位为1时才会1.否则为0。

int8_t n = 0xd7  //二进制补码为11010111
int8_t m = 0x64  //二进制补码为01100100
printf("%d",m^n) //二进制补码为10110011

打印结果为-77

~运算

~0101 = 1010 将各位取反

int_t n = 0xd7  //二进制补码11010111
printf("%d",~n)  //二进制补码为00101000

打印结果40

<<左移位运算

m<

int8_t n = 0xd7    //二进制补码为11010111
n =  n << 2        //二进制补码为01011100
printf("%d",n)

打印结果为92

>>右移位运算

m>>n,m的二进制向右移动n位,左边空出的位用最高位填充

int8_t n = -128    //二进制补码10000000
i = i >> 2         //二进制补码11100000  前两位用最左边第一位填充
printf("%d",i)

打印结果-32

你可能感兴趣的:(位运算)