2进制 转 10进制:

要从右到左用二进制的每个数去乘以2的相应次方(次方要从0开始算起)
例如:二进制数1101转化成十进制
1101(2) = 1 * 20 + 0 * 21 + 1 * 22 + 1 * 23 = 1 + 0 + 4 + 8 = 13

10进制 转 2进制:

十进制整数转换为二进制整数采用除2取余,逆序排列法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

789 = 1100010101
789 / 2 = 394 余1 第10位
394 / 2 = 197 余0 第9位
197 / 2 = 98   余1 第8位
98   / 2 = 49   余0 第7位
49   / 2 = 24   余1 第6位
24   / 2 = 12   余0 第5位
12   / 2 = 6     余0 第4位
6     / 2 = 3     余0 第3位
3     / 2 = 1     余1 第2位
1     / 2 = 0     余1 第1位

与运算(and):

参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。

举例:

3 的二进制 00000011
5 的二进制 00000101
两者在1号位上皆为1,则结果为00000001,就是1

3 的二进制 00000011
7 的二进制 00000111
两者在1号位2号位上皆为1,则结果为0000011,就是3

7   的二进制是 00000111
15 的二进制是 00001111
两者的结果为00000111,还是7

或运算(or):

两个相应的二进制位中只要有一个为1,该位的结果值为1。

举例:

3 的二进制 00000011
5 的二进制 00000101
结果为00000111,就是7

3 的二进制 00000011
7 的二进制 00000111
结果为0000111,还是7

7 的二进制是 00000111
8 的二进制是 00001000
两者的结果为00001111,就是15

异或运算(xor):

若参加运算的两个二进制位值相同则为0,否则为1。

举例:

57 的二进制是 00111001
42 的二进制是 00101010
结果是00010011,即19

更详细的可以看这里:C语言位运算详解

衍生用法,使用二进制来做是否占位的标识

首先,我们所能使用的标志位是限定的,即2的n次方的值:

状况A 1     00000001
状况B 2     00000010
状况C 4     00000100
状况D 8     00001000
状况E 16   00010000
状况F 32   00100000
状况G 64   01000000
状况H 128 10000000

其次,复合的状况就使用状况值的合,比如说即A且B,就 1 + 2 = 3

在检查是否状况标识为真,就使用与运算:

3 包含了 1 和 2,则 3 & 1 = 1 > 0,且 3 & 2 = 2 > 0
这个时候你可以试试看别的:3 & 8 = 0,3 & 128 = 0