与运算(&):
两位同时为1,则为1,否则为0。
eg: 0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1
用途:a.清零 如果想让一个单元全部为二进制0,只要让其和一个各位都为0的数值相与即可。
b.取一个数的指定位 使一个只有指定位为1的数与原数相与即可。
eg. X = 10110110,取低四位:X & 00001111 = 00000110
或运算(|):
参与运算的两个数只要有一个为1,则结果为1,否则为0。
eg: 0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1
用途:将数据指定位置为1 使一个只有指定位为1的数与原数相或即可。
eg. X = 10100000,将低四位置为1:X | 00001111 = 10101111
异或运算(^):
参与运算的两个数不同,则结果为1,否则为0。
eg: 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0
用途:a.使指定位翻转 使一个只有指定位为1的数与原数相异或即可。
eg:X = 10100110,使低四位翻转: X ^ 00001111 = 10101001
b.与0相异或,保留原值。
取反(~):
对一个二进制数按位取反,即1变0,0变1。
使一个数最低位为0,可以表示为a & ~1。~1只有最低位为0。
左移运算符(<<):
将二进制数左移若干位(左边的二进制位丢弃,右边补0)。若左移时舍弃的高位无1,则每左移一位,相当于该数乘以2。
右移运算符(>>):
将二进制数右移若干位(右边的二进制位丢弃,正数左补0,负数左补1),操作数每右移一位,相当于该数除以2。
不同长度的数据进行位运算时,系统会将二者按右端对齐进行位运算。左边不足的位按以下情况不租:
(1)如果整型数据为正数,左边补0
(2)如果整形数据为负数,左边补1
(3)如果整形数据为无符号数,左边补0
参考:https://blog.youkuaiyun.com/xiaopihaierletian/article/details/78162863