序言:位运算是一种直接对整数在内存中的二进制位进行操作的运算。它有很多优点,比如效率高、节省空间、可以实现一些特殊的功能等。
位运算涉及到以下几种运算符:
与运算(and &)
两个都为1,结果为1
1011 1001
1101 1000
-----------
1001 1000
或运算 (or |)
只要有一个为1,结果为1
1011 1001
1101 1000
-----------
1111 1001
异或运算(xor ^)
不相同则为1
1011 1001
1101 1000
-----------
0110 0001
非运算(单目运算符 not~)
0就是1,1就是0,取反!
1011 0001
-----------
0100 1110
位运算(移动位)
左移:(ssl <<)
所有二进制位全部左移若干位,高位就丢弃了,低位补0
0000 0001
----------左移一位
0000 0010
右移:(ssr >>)
所有二进制位全部右移若干位,低位就丢弃了,高位就需要补0,1(符号位决定。)
0000 0001
----------右移一位
0000 0000
位运算的加减乘除:
首先计算机只认识0和1。那么开始我们的示例:
4+5=?
#计算机是怎么操作的!
0000 0100
0000 0101
-----------(加法,计算机是不会直接加的)
0000 1001
#计算机的实现原理
#第一步:异或:如果不考虑进位,异或就可以直接出结果。
0000 0100
0000 0101
-----------
0000 0001
#第二步:与运算:(判断进位,如果与运算结果为0,没有进位。)
0000 0100
0000 0101
-----------
0000 0100
#第三步:将与运算结果向左移一位
0000 0100
---------
0000 1000
#第四步:异或
0000 0001
0000 1000
-----------
0000 1001
#第五步:与运算:(判断进位,如果与运算结果为0,没有进位。)
0000 0001
0000 1000
-----------
0000 0000
#所以最终结果就是与运算结果为0的上一个异或运算的结果。
4-5=?
# 4-5就是 4 +(-5)
0000 0100
1111 1011 -5是有符号数,要经过原码反码补码进行编译
----------(减法:计算机是不会直接减的)
1111 1111
0000 0100
1111 1011
----------异或:如果不考虑进位,异或就可以直接出结果。
1111 1111
0000 0100
1111 1011
---------与运算:判断进位,如果与运算结果为0,没有进位。
0000 0000
#最终结果 1111 1111 ff