文章如有纰漏、欢迎指正!!
按位运算符的基本运算
~取反 0变1 1变0
&与 同为1则1
|或 一个为1则1
^异或 仅一个为1则1
前期介绍:
上面是对于一位二进制1和0的运算规则,对于多位如八位二进制数,运算则是相同位进行按位运算操作
如:01000000&10111011==11111011
两个数第一位与第一位按位运算,第二位与第二位按位运算。
掩码:一个二进制数 用于对于某个二进制数字特定的位进行操作
例如00000001可用于对1号位进行操作
掩码之所以叫掩码 是因为它的0好像一层不透明膜 1好像一层透明膜 通过&运算让这个膜覆盖在一个二进制数上 掩码为0就一定为0 掩码为1就看原来那个二进制数是0还是1
操作:
1.打开特定位:
如:打开1号位 让一个掩码为(00000001)
对于二进制数10100000
只要让它|=(00000001) 就可以让它得1号位变为1 如果1号位本来就是1 则仍为1
2.关闭特定位
如:关闭1号位 让一个掩码为(00000001)
对于二进制数10100001
只要让它&=~(00000001)就可以让1号位变为0 如果1号位本来就是0 则仍为0
3.切换特定位
如:切换1号位 让一个掩码为(00000001)
对于二进制数01010001
只要让它^=(00000001) 就可以将1号位切换为0
对于二进制数01010000
只要让它^=(00000001) 就可以将1号位切换为1
4.检查特定位
如:检查二进制数01010010的2号位是否为1 则让一个掩码为00000010
可用下面的式子来判断
(01010010&00000010)==00000010
二进制数 掩码 掩码
检查检查二进制数01010010的3号位是否为0 则让一个掩码为00000100
可以将该二进制数取反 再判断3号位是否为1
即
(~01010010&00000100)==00000100
二进制数 掩码 掩码
左移和右移
左移:
a << n
对于一个二进制数a 将其所有位向左移n位 末端值丢失 空出的位置0补上 相当于乘以2^n
右移:
a >> n
对于一个二进制数a 将其所有位向右移n位 末端值丢失 空出的位置0补上 相当于除以2^n
C语言可以存储十六进制数,以0x开头 如0xff为11111111即255
输入和输出对应的符号为%x
下面是十进制、二进制、十六进制对应表,方便参考:
十进制数 | 二进制数 | 十六进制数 |
0 | 0000 | 0 |
1 | 0001 | 1 |
2 | 0010 | 2 |
3 | 0011 | 3 |
4 | 0100 | 4 |
5 | 0101 | 5 |
6 | 0110 | 6 |
7 | 0111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | a |
11 | 1011 | b |
12 | 1100 | c |
13 | 1101 | d |
14 | 1110 | e |
15 | 1111 | f |