按位运算符
文章如有纰漏、欢迎指正!!
按位运算符的基本运算
~取反 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 |