囫囵吞桃的个人博客 Home

按位运算符

#技术笔记 #博客园 #算法竞赛

文章如有纰漏、欢迎指正!!

按位运算符的基本运算

~取反 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